Map------------------key/value键值对
HashMap : 实现了hash算法。底层是一个数组Entry<K,V>[] table, 这个table每个位置存放一个Entry,每个Entry相当于一个桶,通过hash算法特定的数据会放到一个桶内。取值时,通过hash算法得到对象存放的位置,即数组的下标,然后再从这个桶内循环查找,直到找到与key相同的值。
LinkedHashMap :继承于hashmap,与hashmap的存取方式是一样的。但是linkedhashmap的Entry类额外增加了两个字段 Entry<K,V> before , after ;一个头结点 private transient Entry<K,V> header;
用header当头结点,结合before和after属性形成一个环形双向链表。每当加入一个key/value到集合中时,会把这个对象放到链表中的最前端(header的after端)。当循环集合时从链表的最后端(header的before端)开始遍历,这样遍历出来的结果就保证了是按插入的顺序遍历的。
TreeMap : 实现的是红黑树算法。按照排序二叉树的规则添加对象节点,按照红黑树的规则修正二叉树的高度使根节点两边的高度能达到平衡。TreeMap遍历出来的对象是排好序的。
Set------------------ 是没有重复对象的集合。
HashSet: 持有一个HashMap的临时对象,用HashMap的key当做对象存储,所有的value值都是同样的一个不变的对象。HashSet是通过HashMap的key不能重复来保证没有重复的对象。
LinkedHashSet:继承于 HashSet,但持有的是一个LinkedHashMap对象。保证没有重复对象的同时也保证了能按插入顺序取出集合中的对象。
TreeSet :持有一个TreeMap对象。保证没有重复对象的同时,也保证了能按一定的排序取出集合中的对象。
List------------------位置性集合。加进清单的元素可以加在清单中特定位置或加到末尾
ArrayList : 底层是一个数组对象,通过一定的规则来扩容。插入和删除比较耗性能,每次插入或删除一个对象都会导致很多对象的移动。但是取对象速度很快。
Vector: 与ArrayList相差不大,只是vector是线程安全的。
LinkedList : 用内部内Node<E>对象形成一个双向链表,有头指针first和尾指针last。插入或删除只需要改变引用的节点所以速度很快。但是查找速度很慢,需要一个个节点的遍历。