Collection --Queue --优先级队列/数组实现的队列 Map --WeakedHashMap
/ \ / \
List Set HashMap TreeMap
/ \ / \ |
ArrayList LinkedList HashSet TreeSet LinkedHashMap
|
LinkedHashSet
两个可以进行比较的接口的区别:
Comparable:需要比较对象实现该接口,有CompareTo()方法。
Comparator:比较器,使比较器类实现该接口,将要比较的对象传到这个实现类的对象中。
第二个更好一些,它相当于一个工具类,第一个对要比较的对象耦合度较高。
Collection:接口 里面包含常用的方法,add().remove() contains() isEmpty()等基础方法。
List:元素在序列中,根据索引对序列特定位置进行操作,重写的方法中要传入索引index值。
Arraylist:底层是数组实现的List容器,查找效率高,默认容量是10,扩容1.5倍,在底层new一个1.5倍容量的数组进行扩容。
LinkedList:链表实现的,对删除和存入效率很高。
Set:方法和Collection完全相同,确保容器内元素唯一,根据这个特性可以用来查找。
HashSet:HashSet底层持有一个HashMap,key就是存储的值,value是统一的一个值,HashSet中的各种方法实际上是调用HashMap相应的方法实现的。
TreeSet:持有一个TreeMap。
LinkedHashSet:底层是LinkedHashMap。
Map:存储的是键值对。
HashMap:层是Hash表来实现的Set,在add()方法中调用,contains()方法,cotains方法会根据对象的hashcode判断在哪个桶内,然后调用equals方法和桶内其他元素比较如果相同就要插入失败。
LinkedHashMap:底层是Hash表和双向链表,继承HashMap,持有的Entry类继承了HashMap中的类,并且多了before,after两个引用,分别指向hash表中自己节点的前驱和后继,有序方式分为两种,一种是插入时的顺序,一种是访问顺序(通过get方法等),有一个标志位来切换两种顺序。
TreeMap:底层是红黑树实现的Map,树的节点存储的是Entry,遍历时是有序的,顺序是底层定义的比较器所比较的顺序。
Hash表:桶的数量要选择2的整数次幂,因为确定一个对象所在的桶需要使用,Hashcode%桶数得到,而除法和求余操作对于处理器来说是最慢的,而二的整数次幂可用掩码代替除法。