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()

遍歷:

根據鍵找值

根據鍵值對對象分別找鍵和值



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章