數據結構隨筆

摘要: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時,獲得的記錄是排過序的。

http://www.cnblogs.com/liqizhou/archive/2012/09/27/java%E4%B8%ADtreemap%E5%92%8Ctreeset%E5%AE%9E%E7%8E%B0%E7%BA%A2%E9%BB%91%E6%A0%91.html

l WeakHashMap

l ConcurrentHashMap

l PriorityQueue 最小堆

l ConcurrentSkipListMap 跳躍表

 

備註:http://java-mzd.iteye.com/blog/827523  Hash表分析以及Java實現

 

一個用於幫助實現您本身的 Map 類的抽象類

l AbstractMap

相關文章
相關標籤/搜索