虽是读书笔记,但是如转载请注明出处http://segmentfault.com/blog/exploring/
..拒绝伸手复制党
容器之间的区别通常归结为:由什么在背后“支持”它们,即,所使用的接口是由什么样的数据结构实现的。
# 对 List 的 选择:
ArrayList 和 LinkedList 基本的 List 操作是相同的。但是 ArrayList 底层是 数组实现的,LinkedList 是双向链表实现的(其中每个对象包含数据的同时还包含指向链表中前一个元素和后一个元素的应用)。
因此,如果经常在表中插入删除应该使用 LinkedList,如果大量随机访问元素,应该使用ArrayList.
最佳的做法可能是将 ArrayList 作为默认首选,只有你需要使用额外的功能,或者当程序的性能因为经常插入和删除变差的时候,才去选择LinkedList.
# 对 Set 的选择
Set 可以被实现为 TreeSet, HashSet, LinkedHashSet. 可以根据所需要的行为来选择不同的接口。
行为: HashSet 最常用,特别添加和查询元素的时候速度快;
LinkedHashSet 保持元素的插入顺序; 插入操作,LinkedHashSet 比HashSet 代价更高,这是由维护链表所带来额外开销造成的。
TreeSet 基于TreeMap,1. 生成一个维持元素处于排序状态的Set. 只有当需要一个排好序的 Set 时,才应该使用TreeSet. 因为其内部结构支持排序。 2. 用 TreeSet 迭代速度比 HashSet 速度快。
# 对 Map 的选择
除了 IdentityHashMap, 所有的Map实现插入和删除操作都会随着Map尺寸的变大而明显变慢。但是查找的代价要比插入小很多。
Hashtable 的性能大体上与 HashMap 相当,因为HashMap 是用来替代 Hashtable 的,因此他们使用了相同的底层和查找机制。使用 Map 时候,第一选择应该是hashmap.
LinkedHashMap 比 HashMap 慢, 代价更高,这是由维护散列结构的同时还要维护链表所带来额外开销造成的。
TreeMap 通常比 HashMap 慢。 与使用 TreeSet 一样,TreeMap 是一种创建有序列表的方式。
IdentityHashMap 具有完全不同的性能,因为它使用 == 而不是 equal() 来比较元素。
应该避免使用Vector,它只存在于支持遗留代码的类库中。
ArrayList 和 Vector 区别?
Vector 和 ArrayList 都是基于Object[] array 数组来实现的,根据索引来访问元素。二者最大的区别就是同步的使用。
Vector 中所有方法都是直接或者间接同步的,所以 Vector 是线程安全的(即多个线程操作同一个 vector 对象时是线程安全的),但是只有一个线程操作时考虑到同步控制会耗费系统资源所以效率低。
ArrayList 中的所有方法都是线程非同步的,但有多个线程操作时是不安全的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。