一、List
1、ArrayList
继承AbstractList类,实现List, RandomAccess, Cloneable, java.io.Serializable接口,采用Object[]数组方式存储,查询快,增删慢,实现了可变大小的数组,原理是通过Arrays.copyOf()再new一个数组
2、Vector
继承AbstractList类,实现List, RandomAccess, Cloneable, java.io.Serializable接口,采用Object[]数组方式存储,查询快,增删慢,方法被synchronized修饰,所以线程安全
3、LinkList
继承AbstractSequentialList类(继承AbstractList),实现List, Deque, Cloneable, java.io.Serializable接口,采用链表方式存储,增删快,查询慢
二、Map
1、HashMap
HashMap继承AbstractMap类,并实现Map, Cloneable, Serializable接口
key通过hash后和value存储到哈希表中,没有使用synchronized,所以线程不安全,但效率比较快,而且还能支持键值为null
2、Hashtable
Hashtable继承Dictionary类,并实现Map, Cloneable, Serializable接口
Hashtable方法都被synchronized修饰,所以是线程安全的,但效率没HashMap快,不能支持键值为null
3、LinkedHashMap
LinkedHashMap继承HashMap类,并实现Map接口,键值对既在哈希表中,又在双向链表中
LinkedHashMap内部有个双向链表,同时支持插入顺序和访问顺序两种
插入顺序:先进先出;访问顺序:所谓访问指的是get/put操作,对一个键执行get/put操作后,其对应的键值对会移动到链表末尾,所以最末尾的是最近访问的,最开始的是最久没有被访问的。