存储的单个元素
Collection:不唯一,无序
最共性的方法:add(E e),isEmpty(),size(),contains(Object obj),clear(),remove(Object obj),iterator()
List:不唯一,有序
ArrayList:数组 ;优点:遍历快;缺点:增、删,效率低
Vector:数组
LinkedList:链表;优点:增,删除效率高;缺点:遍历慢
Set:唯一,无序
HashSet:哈希表(顺序表+链表),当节点数超过8个时,采用红黑树,使用HashMap的 结构;唯一,无序,要求,所存储的自定义对象,必须重写hashCode()的equals()方法,目的是去掉重复元素
LinkeHashSet:有序的哈希表,链表+哈希表,添加顺序
TreeSet:红黑树,唯一,有序(升序);存储自定义对象时,要求自定义类的实现Comparable接口,具备比较大小的能力,也可以编写一个规则类,去实现Comparator接口,定义比较的规则,在TreeSet的构造方法中将规则传入
存储键值对Map接口
增:put(K key,V value)
删:clear(),remove(Object key)
查:get(Object key),keySet(),values(),entrySet()
判断:containsKey(Object key),containsValue(Object value)
HashMap(哈希表)
key:Set类型,无序,唯一
value:Collection类型,不唯一
LinkedHashMap(链表+哈希表)
有序的哈希表
key:LinkedHashSet
TreeMap(红黑树)
唯一,有序(升序)
key:实际上就是TreeSet
如果使用自定义类作为键时,需要具备比较大小的能力
如:使用匿名内部类重写
TreeMap的原理
如果调用的是无参构造方法创建对象,将使用默认的(Comparable接口的比较规则)如果调用带参构造方法,将使用提供的规则进行比较大小
在调用添加方法put时,需要进行比较大小,如果小在左孩子找,如果大在右孩子找,如果不大不小,找到了,值被覆盖,如果没有找到,说明添加的元素在“树”中不存在,需要将元素添加“树“上,如果小于0,添加到左孩子上,如果大于0添加到右孩子上。