1. 程式人生 > >JAVA容器

JAVA容器

執行 叠代 存儲位置 替換 存儲空間 bject com 指向 位置

JAVA容器大致包括兩大陣營:Collection和Map。

先來看一下Collection。

技術分享

1. Collection

Collection首先實現了叠代器Iterator,這樣所有Collection的子類都可以使用Iterator進行遍歷。

2. List,ArrayList,LinkedList

List,有序可尋址容器

ArrayList,基於數組實現,存儲空間連續,尋址容易,但是執行刪除和插入困難。

LinkedList,實現了Deque和List兩個接口,基於鏈表實現,特點是尋址困難,但是執行插入和刪除操作容易。

3. Vector和Stack

Vector和Stack是古老的容器,不建議使用,如果需要用到棧,可以用ArrayDeque替代。

4. Set,TreeSet,HashSet,LinkedHashSet

Set是無序的不能尋址的容器,且裏面沒有重復項。

TreeSet,將元素按照紅黑樹存儲,能夠對元素進行排序。

HashSet,根據哈希算法尋址存儲元素,後面會詳細介紹。

LinkedHashSet,使用鏈表來維護元素的次序,元素看起來像按元素插入的順序來訪問集合裏的元素。插入性能略低於HashSet,但是利用叠代遍歷全部元素時,性能優於HashSet。

4. Queue,PriorityQueue,Deque,ArrayDeque

Queue,先入先出的容器。

PriorityQueue,違背了先入先出的原則,會對元素按照大小重排,先輸出最小的元素。

Deque,雙向隊列,可以從隊首和隊尾插入元素。

ArrayDeque,可以用來替代Stack。


技術分享

關於Map我們用到的主要如圖中所示:

1. HashMap,LinkedHashMap

通過Key的HashCode計算存儲位置

LinkedHashMap能夠保證插入順序和叠代順序一致

2. TreeMap

能夠保證所有的key-value處於有序的狀態


操作集合的工具類:Collections

包括排序操作,查找替換操作,同步控制,設置不可變集合(只讀版本的集合)

同步控制可以將指定集合包裝成線程同步的集合,將線程不安全變為線程安全。


推薦閱讀博文 http://www.cnblogs.com/LipeiNet/p/5888513.html


HashSet和HashMap的深入討論

HashCode

equals

有時候需要重寫equals和HashCode,原則是保證當兩個對象通過equals返回true時,也需要兩個對象的hashCode方法返回相等的值。

因為當多個元素的hashCode相同但是equals方法返回false時,就需要在一個桶裏放多個元素,這樣會導致性能下降。


順便討論一下==和equals

兩個引用類型變量,只有當他們指向同一個對象時,==判斷才會返回true。

Object提供了equals的實現,和==相同。String重寫了這個方法用來比較字符串相同。

JAVA容器