Java集合類簡要總結打賞

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表所占的內存開銷。較高負載因子則反之,一般對數據的查詢比較頻繁,所以一般情況下初始容量應該大一點,但也不能太大,否則浪費內存空間。

Java集合類簡要總結
文章《Java集合類簡要總結》二維碼
  • 微信打賞
  • 支付寶打賞

已有13條評論

  1. 屁孩

    用的最多的就是ArrayList、HashMap,其他就很少了!

    2012-02-27 00:07 回復
    • 窮小子

      確實啊,你也是做java開發的?我新手,以后多指教哦。。

      2012-02-27 21:14 回復
      • 屁孩

        呵呵,這些年一直做Java,指教談不上,互相交流吧!

        2012-02-28 09:13 回復
        • 窮小子

          呵呵,多多交流哈,你現在在哪工作呢?

          2012-02-28 10:47 回復
  2. 愛吧文學

    謝謝,不錯哦!先收藏。

    2012-02-24 12:11 回復
  3. 武林之人

    哈哈,不錯不錯,總算找到了!

    2012-02-23 23:39 回復
  4. 劉學政博客

    怎奈我看不懂技術……

    2012-02-23 22:56 回復
  5. win8迷

    表示不懂java

    2012-02-23 21:43 回復
  6. 特色小吃

    沒看懂,呵呵。

    2012-02-23 17:27 回復
  7. 女褲品牌

    干這個也有好千塊一個月吧

    2012-02-22 14:40 回復
    • 窮小子

      差不多吧。現在還是基層學者,呵呵

      2012-02-22 21:15 回復
  8. 朱定聰

    0.0 不懂不懂~~

    2012-02-22 06:25 回復
    • 窮小子

      學了就懂了。。基礎的東西,用來備忘而已

      2012-02-22 21:15 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖