java集合: List、Set、Map總結 + HashMap/Hashtable 差別

來源:互聯網
上載者:User

標籤:儲存   next   類型   曆史   array   table   abs   pre   tom   

List:(有序,能夠反覆)通過下標索引    ----ArrayList  可變數組,隨機尋找    ----LinkedList    鏈表,不論什麼位置插入刪除快    ----Vector    效率比arraylist低。可是能夠用於多線程同步

Set:(無序,不能夠反覆)set最多有一個null元素。由於不能夠反覆    ----HashSet    沒有排序,不反覆(順序隨機)    ----LinkedHashSet    按插入排序。不反覆(按插入順序)    ----TreeSet    實現Comparable介面,對象能夠比較(依照插入值大小升序)(依照二叉樹排序)

Map:(鍵值類似list中的下標。可是map下標是隨意類型,list下標僅僅是int類型)    ----HashMap    定位、插入刪除一個映射搞笑    (順序隨機) 不同步,同意null value -- null key      ----Hashtable    同步。不同意null鍵值       ----LinkedHashMap    依照插入順序排序    (按插入順序)    ----TreeMap    在遍曆排好序的鍵值是高效的,實現Comparable介面    (依照鍵值升序)(依照二叉樹排序)
 Hashmap、Hashtable都是一個數組和鏈表的結合體(在資料結構稱“鏈表散列“)hashTable和hashMap的差別:    ----Hashtable 中的方法是同步的。而HashMap中的方法在預設情況下是非同步的。    ----Hashtable中key和value都不同意null值,而HashMap中僅僅同意一個null鍵。值能夠為null。    ----HashMap效率比Hashtable高    ----繼承不同。
public class Hashtable extends Dictionary implements Map
public class HashMap  extends AbstractMap implements Map
    ----雜湊值的使用不同,Hashtable直接使用對象的hashCode。而HashMap又一次計算hash值,並且用與取代求模    ----Hashtable中hash數組預設大小是11。添加的方式是 old*2+1。

HashMap中hash數組的預設大小是16,並且一定是2的指數。    ----Hashtable、HashMap都使用了 Iterator。而因為曆史原因,Hashtable還使用了Enumeration的方式  詳細使用:

Map map = new HashMap();map.put("a","100");map.put("b","200");map.put("c","200");Iterator iter = map.entrySet().iterator();while (iter.hasNext()) {    Map.Entry entry = (Map.Entry) iter.next();    Object key = entry.getKey();    Object val = entry.getValue();}//或者for(Map.Entry entry : map.entrySet()){    Object key = entry.getKey();    Object value = entry.getValue();}


Java的類為什麼須要hashCode?(hashCode的作用)

    總的來說,Java中的集合(Collection)有兩類,一類是List,再有一類是Set。你知道它們的差別嗎?前者集合內的元素是有序的。元素能夠反覆;後者元素無序,但元素不可反覆。那麼這裡就有一個比較嚴重的問題了:要想保證元素不反覆,可兩個元素是否反覆應該根據什麼來推斷呢?這就是 Object.equals方法了。

可是,假設每添加一個元素就檢查一次,那麼當元素非常多時,後加入到集合中的元素比較的次數就非常多了。

也就是說,假設集合中如今已經有1000個元素。那麼第1001個元素加入集合時,它就要調用1000次equals方法。這顯然會大大減少效率。

   

    於是。Java採用了雜湊表的原理。雜湊演算法也稱為散列演算法,是將資料依特定演算法直接指定到一個地址上。關於雜湊演算法。這裡就不具體介紹。能夠這樣簡單理解,hashCode方法實際上返回的就是Object Storage Service位置的映像。
   

     這樣一來。當集合要加入新的元素時,先調用這個元素的hashCode方法,就能定位到它應該放置的儲存位置。

假設這個位置上沒有元素,它就能夠直接儲存在這個位置上,不用再進行不論什麼比較了。假設這個位置上已經有元素了,就調用它的equals方法與新元素進行比較,同樣的話就不存了,不同樣就表示發生衝突了。散列表對於衝突有詳細的解決的方法,但終於還會將新元素儲存在適當的位置。這樣一來,實際調用equals方法的次數就大大減少了,差點兒僅僅須要一兩次。



1、相等的對象必須具有相等的雜湊碼(或者散列碼)。


2、假設兩個對象的hashCode同樣,它們並不一定同樣。(hashCode()相等的equals()不一定相等;equals()相等的hashCode()肯定相等)

請註明出處:http://blog.csdn.net/df1012890048/article/details/38672155



java集合: List、Set、Map總結 + HashMap/Hashtable 差別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.