import java.util.Hashtable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Stack;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Vector;
今天看了java系統提供的一些基本的集合,這里匯總一下,算是學習的一個總結。
他們所有的集合基本都是基於 collection接口 和 Map 接口
Collection
1.list (ArrayList ,LinkedList(頻繁插入刪除的時候用),Vector(線程安全),Stack(先進后出))
2.set (HashSet(無序,根據哈希值查找Entry),TreeSet(需要排序的時候用),LinkedHashSet(有序&&有序迭代的時候用) )
Map
1.TreeMap(需要排序的時候用)
2.HashMap(無序,根據key的哈希值查找Entry,concurrentHashMap(線程安全)),LinkedHashMap(有序&&有序迭代的時候用),HashTable(線程安全)
然后我們對具體的每個集合做一個簡單的分析
ArrayList:數組集合,無容量限制,非線程安全
LinkedList:基於雙向列表的機制,插入創建一個Entry對象,並切換前后元素引用,非線程安全
相對於ArrayList,其優勢:add,remove較快,因為只需要操作前后元素,而ArrayList需要操作整個列表
get,set較慢以為ArrayList是有序的,LinkedList需要整個遍歷
Vector:同ArrayList類似,最大區別是線程安全,還有自動擴充機制為2倍(ArrayList1.5倍)
Stack:繼承自Vector,壓棧,后進先出(push,pop。peek)
所有HashSet都是在加入的時候,先從對象中hashcode一個值,然后通過這個值加入到Set中
HashSet:基於HashMap實現,非線程安全,能存一個null(哈希表通過使用散列表的形式來存貯信息,集合內元素沒有特定順序,且隨時會變)
TreeSet:(SortedSet)基於TreeMap實現 ,key需要實現comparator,實現排序
相對於HashSet:支持排序
LinkedHashSet:根據哈希值來判斷元素存貯的位置,同時使用鏈表來維護元素之前的順序,所以他是有序的
優勢:迭代速度比HashSet好,插入刪除查(因為需要維護前后元素的關系)
HashMap:根據數組的中hash碼,查找Entry在另外一個數組中的位置,遍歷用iterator
HashTable:線程安全,不允許null,便利用enumeration
TreeMap:能排序的map
LinkedHashMap:相對於HashMap,插入的時候有序,所以排序的時候
