Collection介面,Map介面

2022-09-11 01:42:13 字數 2069 閱讀 6317

1.collection是集合類的頂級介面,直接繼承介面喲list和set。

list介面是有序的,元素可重複,有索引;其下有:

arraylist:底層資料結構使用的是陣列結構,執行緒不同步,增刪慢,查詢快;

linkendlist:使用雙向鍊錶結構,執行緒不同步,增刪快,查詢慢;

vector:使用資料結構,執行緒同步,效率較低。

若對乙個資料進行刪除,在十萬條資料下,需要進行查詢,然後刪除,從整體效率上來說,arraylist比linkendlist速度要快,

set介面是無序的,元素不可重複其下有:

hashset:執行緒不同步的,元素中可以有null,但只能有乙個null,

當向hashset集合中存入乙個元素時,hashset會呼叫該物件的hashcode()方法來得到該物件的hashcode值,然後根據 hashcode值來決定該物件在hashset中儲存位置。

簡單的說,hashset集合判斷兩個元素相等的標準是兩個物件通過equals方法比較相等,並且兩個物件的hashcode()方法返回值相等

hashset底層是使用hashmap來儲存元素的

treeset:可以確保集合中元素處於排序狀態,支援自然排序(預設)和定製排序,不允許放入null值。

比較:1.hashset 是雜湊表實現的,hashset中的資料是無序的,可以放入null,但只能放入乙個null,兩者中的值都不能重複,就如資料庫中唯一約束,

2.treeset是二叉樹實現的,treeset中的資料是自動排序好的,不可以放入null值。

3.hashset要求放入的物件必須實現hashcode()方法,放入的物件,是以hashcode碼作為標識的,而具有相同內容的 string物件,hashcode是一樣,所以放入的內容不能重複。但是同乙個類的物件可以放入不同的實        例 。

2.map介面,不繼承conllection介面,描述的從不重複的鍵到值的對映,有兩個重要的實現類hashmap和treemap:

hashmap:基於雜湊表實現,特點就是鍵值對的對映關係,鍵無法重複,若相同的鍵,其值會被覆蓋,可以接受null值的鍵或值。排序不固定,執行緒不同步。

treemap:基於紅黑樹實現,保持某種固定順序。

hashtable:同樣實現map介面,執行緒同步,不能儲存null值的鍵或值,

j**a 5提供了concurrenthashmap,它是hashtable的替代,比hashtable的擴充套件性更好。hashmap可以通過下面的語句進行同步:map m = collections.synchronizemap(hashmap);

hashmap和hashtable都實現了map介面,但決定用哪乙個之前先要弄清楚它們之間的分別。主要的區別有:執行緒安全性,同步(synchronization),以及速度。

hashmap幾乎可以等價於hashtable,除了hashmap是非synchronized的,並可以接受null(hashmap可以接受為null的鍵值(key)和值(value),而hashtable則不行)。

hashmap是非synchronized,而hashtable是synchronized,這意味著hashtable是執行緒安全的,多個執行緒可以共享乙個hashtable;而如果沒有正確的同步的話,多個執行緒是不能共享hashmap的。j**a 5提供了concurrenthashmap,它是hashtable的替代,比hashtable的擴充套件性更好。

另乙個區別是hashmap的迭代器(iterator)是fail-fast迭代器,而hashtable的enumerator迭代器不是fail-fast的。所以當有其它執行緒改變了hashmap的結構(增加或者移除元素),將會丟擲concurrentmodificationexception,但迭代器本身的remove()方法移除元素則不會丟擲concurrentmodificationexception異常。但這並不是乙個一定發生的行為,要看jvm。這條同樣也是enumeration和iterator的區別。

由於hashtable是執行緒安全的也是synchronized,所以在單執行緒環境下它比hashmap要慢。如果你不需要同步,只需要單一執行緒,那麼使用hashmap效能要好過hashtable。

hashmap不能保證隨著時間的推移map中的元素次序是不變的。

集合collection介面

集合collection介面 多型的方式建立collection物件 引用實現類物件時,無法呼叫子類特有方法,平常遍歷 arraylist 集合時,我們可以通過 size 方法獲取,長度,get 方法獲取元素並列印輸出,但是這裡父類物件引用實現類時,無法呼叫子類獨有的 get 方法,就無法使用之前的...

容器之Collection和Map

collection 單列集合 list 有儲存順序,可重複 arraylist 陣列實現,查詢快,增刪慢 由於是陣列實現,在增和刪的時候會牽扯到陣列 增容,以及拷貝元素.所以慢。陣列是可以直接 按索引查詢,所以查詢時較快 linkedlist 鍊錶實現,增刪快,查詢慢 由於鍊錶實現,增加時只要讓前...

Collection子介面 List介面

3.常用實現類 4.原始碼分析 難點 4.2 linkedlist的原始碼分析 4.3 vector的原始碼分析 5.儲存的元素的要求 1.儲存的資料特點 儲存序的 可重複的資料。2.常用方法 記住 增 add object obj 刪 remove int index remove object ...