Set笔记

Set笔记
1. List复习
Collection
|-List
|-ArrayList,两个实现类的区别,ArrayList的常用方法
add():往集合中添加一个元素
get(index):根据索引号获取集合中的元素
size():获取集合的长度
remove(index或者对象):根据索引号或者是对象来删除元素
contains(obj):是否包含某个对象
isEmpty():判断集合是否为空
indexOf():索引元素
|-LinkedList
|-Set
ArrayList和LinkedList的区别:
1. ArrayList底层封装数组来实现,分配连续的内存空间;LinkedList地城封装链表实现,分配不连续的内存空间
2. ArrayList读取数据效率高,而LinkedList增,删效率高
3. LinkedList比ArrayList多了对于首元素和尾元素的操作方法
Foreach循环(增强的for循环)
使用方法.
注意:foreach对于不同的类型,处理方式是有差异的,在操作中,比如删除操作需要注意,不要调用集合的remove()方法
泛型
学会在集合和迭代器中使用泛型
扩展:学习如何创建泛型接口,创建泛型类,创建泛型方法(后面会再讲)
Iterator迭代器
Collection下的所有对象,都可以使用Iterator迭代器,因为它们都有一个方法:iterator().该方法返回一个Iterator对象,这个类型的对象下,有hasNext()方法和next()方法。
hasNext()方法用来判断是否有一行,next()方法用来获取下一行数据
注意点:hasNext()方法和next()方法是配套的,一个hasNext()只能调用一次next().
Map(后面会学习)
2. Set集合
List强调的是存入的顺序,存放一组有序,可重复的数据
Set强调的是唯一,存放一组唯一,无序的数据
Set下提供了哪些实现类:
|-HashSet:最常用的(必须掌握)
|-TreeSet:能排序(按数据大小排序,也可以按用户自己的需要排序)
|-LinkedHashSet:比较少见
HashSet的原理
存放:1.调用hashCode()方法,获取哈希码值,判断是否存在这个值
2.如果存在,调用equals()方法(其实在这之前会先用==判断,相等就直接返回false),判断两个对象是否相等,如果相等,添加失败,如果不等,把对象加入HashSet对象中。
3.如果第1步的哈希码值不存在,直接把对象加入HashSet
获取:
先调用hashCode()方法,获取哈希码值,根据哈希码值调用hash()方法,获取存储索引(其实就是存储位置),然后根据索引找到对应的数据(这里能快速找到).
HashSet可以存放多个对象,但不能存放相同的对象。
这里我们也可以人为地改变判定对象相同的条件
如果希望按照我们的方式来判定对象是否相同,需要重写hashCode()方法和equals()方法
TreeSet
内部使用红黑树(二叉树)来对加入的对象进行排序管理
可以用来存储不同类型的数据,存储的数据默认会进行排序.
如果存入的是对象,该对象需要实现Comparable接口,并重写compareTo()方法,这个方法返回正数,负数或0来分别表示对象的小于,大于或等于
当然,TreeSet也提供了一个构造,该构造中可以传递一个Comparator类型的对象,该对象下提供一个compare()的方法,用来对对象进行比较,通过返回正数,负数或0来分别表示对象的小于,大于或等于
LinkedHashSet
• 根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序
• 遍历的时候,LinkedHashSet将会以元素的添加顺序访问集合的元素

猜你喜欢

转载自blog.csdn.net/m0_38016313/article/details/82183781