1.继承关系图
1.特性表
接口 | 类 | 属性 | 特性 | 线程安全 | 常见注意问题 | 比较 |
---|---|---|---|---|---|---|
List | ArrayList | 初始大小:10 扩容:1.5倍 存储:Object[] | 顺序存储 随机访问快速 不易插入和删除某元素,需要执行数组拷贝 | 不安全,fail-fast机制,可用Collections.synchronizedList(list)实现,其原理为给各个方法加对象锁(iterator()和listIterator()方法除外) | subList()方法得到的是原list的试图,对某一方的修改会导致另一方的改变 | Vector的同步由synchronized修饰方法实现,而Collections实现同步为synchronized锁对象成代码块来调用原list对应方法,安全上后者更好但不用方法间也存在竞争 |
LinkedList | 双向链表 | 链表存储 方便插入删除操作 不能随机访问 遍历慢 有实现Queue接口,可当顺序队列使用 | 不安全,fail-fast机制,安全实现同ArrayList(同上) | subList问题(同上) | ||
Vector | 初始大小:10 扩容:如果构造函数传入扩容增量则为(原长度+增量)否则为(原长度*2), 存储:Object[] | 同ArrayList 有子类Stack | 安全,实现为所有方法增加synchronized关键字,其不保证多线程调不同方法出现错误。思考同步方法和同步代码块 | subList问题(同上) |
接口 | 类 | 特性 | 实现原理 | 线程安全 |
---|---|---|---|---|
Set | HashSet | 无序,唯一 | 使HashMap成为其属性,使用HashMap的key存储 | 不安全,可用Collections.synchronizedCollection()方法生成一个线程安全的对应集合 |
LinkHashSet | 有序,按插入顺序 | 使LinkHashMap成为其属性,使用其的key存储,有序原理和LinkHashMap一样,Entry中留有指向前后节点的引用 | ||
TreeSet | 有序,按元素的比较器排序 | 使TreeMap成为其属性,使用其key存储,内部为红黑树 |