一.概述
集合由两个类派生而出
Collection : ( Set 、List 、Queue)
- Set:无序、不重复
- List:有序、可重复
- Queue:队列结构、先进先出
Map: (HashMap Hashtable TreeMap)
- HashMap:key和value允许为null
- Hashtable:key和value不允许为null
- TreeMap:可排序
二.Set介绍
1.HashSet
1.1 HashSet特性
无序,不可重复、非线程同步,元素值可以为null
1.2 HashSet判断重复元素的依据
1.HashSet是根据HashCode决定存储位置
2.仅当HashCode和equals同时为true时,判断元素重复
3.equals比较为true,hashCode比较为false,仍可以添加成功,但与Set规则冲突了
4.equals为false,hashCode为true,可以成功,这种更严重(HashSet是根据hashCode快速找到地址定位的,如果存在两个以上相同的hashCode,性能会下降)
1.3 HashSet添加元素重写equals()和hashCode()的规则
要么都为true,要么都为false
1.4 HashSet存储注意事项
HashSet存储完元素后,不要轻易改动会影响hashCode和equals方法结果的实例变量,否则可能会导致无法找到之前存储的对象
2.TreeSet
2.1 Compareble接口
compareTo(Object obj)方法规则
当A.compareTo(B) ,当A < B 返回 -1 ,当A == B 返回 0 ,当A > B返回1
2.2 TreeSet性质
TreeSet添加元素时必须实现Compareble接口,自然排序时按照compareTo的结果升序排序
有序,不可重复,非线程同步,元素值不可以为null
2.3 TreeSet判断重复元素的依据
仅compareTo()返回0时,TreeSet判断该元素重复
2.4 TreeSet添加元素重写equals()和compareTo()的规则
当equals()返回true时,compareTo()返回0
2.5.TreeSet注意事项
(1)添加的元素必须实现Comparable接口
(2)因为会调用CompareTo接口比较元素,所以最好是只添加同一种类型的对象,以免发生ClassCastException
(3) 与HashSet一样添加完以后就不要修改影响CompareTo判断元素大小的对象属性,否则会造成无法删除,找不到修改前的元素等问题(按红黑树存储,修改后破坏了结构)
三.List介绍
1.基本介绍
List分为ArrayList和LinkedList,前者采用线性表的数据结构,后者采用链表的数据结构
ArrayList使用get()随机访问效率较高,LinkedList使用迭代器访问效率较高
2.使用场景
1.ArrayList适用于遍历、查找比较多的时候效率较高,缺点是增删效率较慢
2.LinkedList适用于大量增删操作,查询效率较低