Java 容器简介
容器基本上分为:List,Set,和 Map
List 必须保持元素特定的顺序,而 Set不能有重复元素;
Map: 一组成对的键值对(key-value)对象。
过去的Vector,Stack 避免使用
List : ArrayList ,LinkedList
对于随机访问(get()),ArrayList的开销小于 LinkedList。 另一方面,从中间的位置插入
和删除元素, LinkedList 要比 ArrayList快,特别是删除操作。 Vector 通常不如 ArrayList
快,而且应该避免使用;它目前仍然存在于类库中的原因是为了支持过去的代码 。
Set : HashSet ,TreeSet ,LinkedHashSet
HashSet 的性能总是比 TreeSet 好(特别是最常用的添加和查询元素操作)。TreeSet
存在的唯一原因是,它可以维持元素的排序状态。所以,只有当你需要一个排好序的 Set
时,才应该使用 TreeSet。
注意,对于插入操作,LinkedHashSet 比 HashSet 略微慢一点;这是由维护链表所带来
额外开销造成的。不过,因为有了链表,遍历 LinkedHashSet 会更快。
Map : HashMap , TreeMap , LinkedHashMap
Hashtable和 HashMap 的效率大致相同。( HashMap 通常更快一点,所以 HashMap 有意取代 Hashtable。)
TreeMap 通常比 HashMap 慢,为什么还需要它?因为可以使用它生成一个排好序的队列。树的行为方式是:它总是处于
排序状态,不需要专门进行排序操作。当 TreeMap 被填充之后,就可以调用 keySet(),取得由“键”组成的 Set,然后使用
toArray()生成“键”的数组。接下来使用Arrays.binarySearch()方法 ,在已排序的数组中快速地查询对象。当然,你应该只
在因为某些原因而无法使用 HashMap 的时候,才去这么做。因为 HashMap 正是为快速查询而设计的。而且,你可以很方便地
通过TreeMap 生成 HashMap。所以,当你需要使用 Map 时,首选 HashMap,只有在你需要一个总是排好序的 Map 时,
才使用TreeMap。