java集合類總結

來源:互聯網
上載者:User

 java集合類主要負責儲存、盛裝其他資料,因此集合類也稱容器類。java集合類分為:set、list、map、queue四大體系。其中set代表無序、不可重複的集合;list代表有序、可重複的集合。map代表具有映射關係的集合;queue代表隊列集合。

       java集合類主要由兩個介面派生:Collection和Map,是集合架構的根介面。下面是其介面、子介面和實作類別的繼承樹。

      

下面就一一介紹四大介面及其實作類別。

 

       Set介面。set集合不允許包含相同的元素。set判斷兩個對象是否相同是根據equals方法。如果兩個對象用equals方法返回的是true,set不會接受這兩個對象。

       HashSet是set介面的典型實現,HashSet按hash演算法來儲存集合中的元素。因此具有很好的儲存和尋找效能。HashSet判斷兩個元素的標準是兩個元素的equals方法比較相等,同時兩個對象的hasCode()方法傳回值也相等。HashSet可以儲存null元素。

       List集合代表一個有序集合。集合中的每個元素都有其對應的順序索引。Arraylist和vector是list介面的兩個典型實現。他們之間的顯著區別就是:vector是線性安全的,而arraylist不是。它們兩個都是基於數組實現的list類。List還有一個基於鏈表實現的LinkedList類。當插入、刪除元素的速度非常快。這個類比較特殊,功能也特別多,即實現了List介面,也實現了Dueue介面(雙向隊列)。可以當成雙向隊列使用,也可以當成棧使用。

       Queue用於類比隊列的資料結構。LinkedList和ArrayDueue是其兩個比較常用的實作類別。

       Map用於儲存具有映射關係的資料。Map介面有如下幾個常用的實作類別:HashMap、HashTable、TreeMap。TreeMap是基於紅/黑樹狀結構對TreeMap中所有key進行排序。HashMap和HashTable主要區別有兩點:1、Hashtable是線性安全的,因此效能差些。2、HashMap可以使用null作為key或者value。

       集合類還提供了一個工具類Collections。主要用於尋找、替換、同步控制、設定不可變集合。

       上面是對java集合類的一般概述,下面就set、list、map三者之間的關係進行剖析。

       Set與Map的關係。Map集合中所有key集中起來,就組成了一個set集合。所以Map集合提供Set<K> keySet()方法返回所有key組成的set集合。由此可見,Map集合中的所有key具有set集合的特徵,只要Map所有的key集中起來,它就是一個Set集合,這就實現了Map到Set的轉換。同時,如果把Map中的元素看成key-value的set集合,也可以實現從Set到Map之間的轉換。HashSet和HashMap分別作為它們的實作類別。兩者之間也挺相似的。HashSet的實現就是封裝了HashMap對象來儲存元素。它們的本質是一樣的。類似於HashSet和HashMap的關係,其實TreeMap和TreeSet本質也差不多,TreeSet底層也是依賴TreeMap實現。

       Map與List的關係。把Map的key-value分開來看,從另一個角度看,就可以把Map與List統一起來。

       Map集合是一個關聯陣列,key可以組成Set集合,Map中的value可以重複,所以這些value可以組成一個List集合。但是需要注意的是,實質Map的values方法並未返回一個List集合。而是返回一個不儲存元素的Collection集合,換一種角度來看對List集合,它也包含了兩組值,其中一組就是虛擬int類型的索引,另一組就是list集合元素,從這個意思上看,List就相當於所有key都是int型的Map。

       下面講解幾個相似類之間的差異。

        ArrayList和LinkedList。ArrayList是一種順序儲存的線性表,其底層是採用數組實現的,而LinkedList是鏈式儲存的線性表。其本質就是一個雙向鏈表。對於隨機儲存比較頻繁的元素操作應選用ArrayList,對於經常需要增加、刪除元素應該選用LinkedList。但總的來說ArrayList的總體效能還是優於LinkedList。

       HashSet與HashMap的效能選項。主要有兩個方面:容量和負載因子(尺寸/容量)。較低負載因子會增加查詢資料的效能,但是會降低hash表所佔的記憶體開銷。較高負載因子則反之,一般對資料的查詢比較頻繁,所以一般情況下初始容量應該大一點,但也不能太大,否則浪費記憶體空間。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.