Collection接口:add(),remove(),size(),iterator()。。。
List子接口:add(index,E),remove(index),get(index),set(index,E),subList(),indexOf(),listIterator()...
有序,有下标,index
允许存储重复的元素
实现类:
ArrayList:底层采用数组结构来实现。
LinkedList:底层采用双向链表来实现。
Vector:旧的类,线程安全,效率低。被ArrayList替代。
Set子接口:
无序
不允许存储相同的元素——>去重
实现类:
HashSet:底层采用哈希表结构来实现。
step1:对象的hashCode码,不相同就直接存储了。如果相同,进入第二步
step1:对象的equals()方法。
true:相同对象
false:不同对象
重写以上两个方法:Object类:hashCode(),equals()
对象的各个属性值都相同——>相同的元素,重复的。
同时重写hashCode()和equals()
规则:
hashCode:如果对象相同,保证哈希值必须相同。如果对象不同,哈希值尽可能不同。
equals:如果对象相同,必须返回true。如果对象不同,必须返回false。
TreeSet:底层采用二叉树结构来实现。
TreeSet--->SortedSet接口--->Set接口
去重的同时,还给元素进行排序。
java.lang.Comparable接口:强行对该接口的实现类对象进行比较排序。
compareTo(o)--->int
o1,o2比较大小
正数:this对象>o对象,排后面。
负数:this对象<o对象,排前面
零:this对象和o对象相同,不存储。——>去重
2.1、Comparable接口
java.lang.Comparable接口:给对象强行排序的。默认的比较器。
intcompareTo(To)
将此对象与指定的对象进行比较以进行排序。
比较的两个对象:this对象和参数o对象比较
说明:排序的规则
正数:this对象>o对象,排后面。
负数:this对象<o对象,排前面
零:this对象和o对象相同,不存储。——>去重
2.2、Comparator接口
java.util.Comparator接口:给对象强行排序的。自定义的比较器。
intcompare(To1,To2)
比较其两个参数的顺序。
比较的两个对象:o1和o2
说明:排序的规则
正数:o1对象>o2对象,排后面。
负数:o1对象<o2对象,排前面
零:o1对象和o2对象相同,不存储。——>去重
注意点:创建一个TreeSet集合,到底使用哪个比较器?Comparable?Comparator?
无参构造:new TreeSet();-->使用默认的比较器:Comparable
有参构造:new TreeSet(Comparator)-->使用自定义的比较器:Comparator
2.3、LinkedHashSet集合
回忆:HashSet存储特点?1、无序。2、去重
HashSet存储数据,记录存储的顺序。
Set集合的另一个实现类:LinkedHashSet
存储原理同HashSet相同,但是外层套了一个链表结构。用于记录存储的顺序。
网友评论