1. 程式人生 > >17.java中集合的底層實現

17.java中集合的底層實現

Collection(List+Set)

|--List 有序,可重複

  |--ArrayList

    底層資料結構是陣列,查詢快,增刪慢。

    執行緒不安全,效率高

  |--Vector

    底層資料結構是陣列,查詢快,增刪慢。

    執行緒安全,效率低

  |--LinkedList

    底層資料結構是連結串列,查詢慢,增刪快。

   執行緒不安全,效率高

|--Set 無序,唯一

  |--HashSet

    底層資料結構是雜湊表。

   如何保證元素唯一性的呢?

   依賴兩個方法:hashCode()equals()

   開發中自動生成這兩個方法即可

  |--LinkedHashSet

    底層資料結構是連結串列和雜湊表

   由連結串列保證元素有序

   由雜湊表保證元素唯一

  |--TreeSet

    底層資料結構是紅黑樹

   如何保證元素排序的呢?

     自然排序

     比較器排序

     如何保證元素唯一性的呢?

      根據比較的返回值是否是0來決定

Map(雙列集合)

A:Map集合的資料結構僅僅針對鍵有效,與值無關。

B:儲存的是鍵值對形式的元素,鍵唯一,值可重複。

  |--HashMap

    底層資料結構是雜湊表。執行緒不安全,效率高

    雜湊表依賴兩個方法:hashCode()equals()

   執行順序:

     首先判斷

hashCode()值是否相同

     是:繼續執行equals(),看其返回值

         是true:說明元素重複,不新增

         是false:就直接新增到集合

     否:就直接新增到集合

     最終:

        自動生成hashCode()equals()即可

   |--LinkedHashMap

      底層資料結構由連結串列和雜湊表組成。

      由連結串列保證元素有序。

      由雜湊表保證元素唯一。

   |--Hashtable

     底層資料結構是雜湊表。執行緒安全,效率低

      雜湊表依賴兩個方法:hashCode()

equals()

       執行順序:

         首先判斷hashCode()值是否相同

            是:繼續執行equals(),看其返回值

              是true:說明元素重複,不新增

              是false:就直接新增到集合

            否:就直接新增到集合

          最終:

            自動生成hashCode()equals()即可

    |--TreeMap

       底層資料結構是紅黑樹。(是一種自平衡的二叉樹)

       如何保證元素唯一性呢?

       根據比較的返回值是否是0來決定

         如何保證元素的排序呢?

         兩種方式

           自然排序(元素具備比較性)

              讓元素所屬的類實現Comparable介面

           比較器排序(集合具備比較性)

              讓集合接收一個Comparator的實現類物件

到底使用那種集合(自己補齊)   看需求。

是否是鍵值物件形式:

  是:Map

   鍵是否需要排序:

      是:TreeMap

      否:HashMap

     不知道,就使用HashMap

  否:Collection

    元素是否唯一:

    是:Set

      元素是否需要排序:

      是:TreeSet

      否:HashSet

      不知道,就使用HashSet

    否:List

      要安全嗎:

      是:Vector(其實我們也不用它,後面我們講解了多執行緒以後,我在給你回顧用誰)

      否:ArrayList或者LinkedList

      增刪多:LinkedList

      查詢多:ArrayList

      不知道,就使用ArrayList

3:集合的常見方法及遍歷方式

Collection:

add()新增   remove()   contains()   iterator()獲取   size()長度

遍歷:

增強for

迭代器

|--List

get()

遍歷:

普通for

|--Set

Map:

put()

remove()

containskey(),containsValue()

keySet()

get()

value()

entrySet()

size()

遍歷:

根據鍵找值

根據鍵值對物件分別找鍵和值