摘要:html
寫些對數據結構的理解。java
1) 我的以爲數據結構最基本的就兩種,鏈表和數組。數組
鏈表的好處在於動態分配內存,增長刪除方便,壞處在於查找不方便,增長額外存儲空間;數據結構
數組的好處在於查找方便;壞處在於增長刪除不方便,超出指定長度後須要從新分配內存。spa
2) 其餘的數據結構,例如堆,棧,樹,隊列均可以使用數組或者鏈表實現。具體實現,能夠查看JDK源碼或者MSDN。代理
常見數據結構,即數據容器htm
a)Tree對象
查詢速度快,插入速度慢blog
BinaryTree:排序
AVL樹:
紅黑樹:
B/B+/B-樹:
b) list
鏈表,順序查詢,插入刪除代價小
c) queue
FIFO,由list/數組/stack實現(list最合適),順序查詢速度快,插入刪除代價小
l ArrayDeque/ArrayList :隊列,其實也是數組,加上頭尾索引
l PriorityQueue:優先隊列
l LinkedQueue/LinkedList:雙向鏈表實現
l LinkedHashMap :單向鏈表實現了
l LinkedHashSet: 內部使用LinkedHashMap
d) Vector
數組,根據下標訪問
e) Stack
FILO,可用數組實現,可本身實現下列類
l ArrayStack 默認初始大小,用數組實現
l LinkedStack 動態增長容量,用鏈表實現
f) heap
最大堆,最小堆,
Util包中無實現,本身可用數組實現
http://lotusyu.iteye.com/blog/1061822
g) map
存儲方式是數組;存儲結構紅黑樹(查找速度快,平均)
Java Util包實現:
通用 Map,用於在應用程序中管理映射
l HashMap 衝突解決使用list
l Hashtable
l LinkedHashMap
保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先獲得的記錄確定是先插入的。
l IdentityHashMap
簡單說IdentityHashMap與經常使用的HashMap的區別是:前者比較key時是「引用相等」然後者是「對象相等」,即對於k1和k2,當k1==k2時,IdentityHashMap認爲兩個key相等,而HashMap只有在k1.equals(k2) == true 時纔會認爲兩個key相等。有其特殊用途,好比序列化或者深度複製。或者記錄對象代理。
l TreeMap
TreeMap實現SortMap接口,可以把它保存的記錄根據鍵排序(使用紅黑樹排序),默認是按鍵值的升序排序,也能夠指定排序的比較器,當用Iterator 遍歷TreeMap時,獲得的記錄是排過序的。
l WeakHashMap
l ConcurrentHashMap
l PriorityQueue 最小堆
l ConcurrentSkipListMap 跳躍表
備註:http://java-mzd.iteye.com/blog/827523 Hash表分析以及Java實現
一個用於幫助實現您本身的 Map 類的抽象類
l AbstractMap