集合的三種類型:List<列表>、Set<集>、Map<映射>


List 和 Set 都實現了Collection 接口,而 Map 則沒有。

(1) List(有序可重復)

  List 采用線性方式存儲,可存放重復的數據。它有兩個子類:ArrayList、LinkedList。

  ArrayList 底層是一個Object[]數組,意味着它有數組的特性,但是它比數組更靈活,無需設置長度,可以動態增長,並且是有序的,可以進行隨機訪問,所以查找快。所以 ArrayList 代表長度可以改變的數組,可以對元素進行隨機訪問。

  ArrayList 有一個兄弟 Vector,Vector 和 ArrayList 不一樣的是:Vector 的方法之間是線程同步的,是線程安全的,效率較低;而 ArrayList 是異步的,是非線程安全的,效率較高。相比之下,建議使用 ArrayList。

  LinkedList 的底層是采用鏈表方式進行排序的,執行增刪操作時,只需更改被更新元素前后的關聯即可。所以建議查詢用 ArrayList,而增刪用 LinkedList。

(2) Set(無序不可重復)

  Set存放的是對象的引用,沒有重復的對象。

  無序不可重復,指的是重復的元素會被覆蓋掉;這里的無序是針對放入順序而言的,並不是絕對的無序。

  Set 集合有兩個子類,HashSet、TreeSet。

  HashSet 是基於Hash算法實現的,它的底層是 HashMap,有着HashMap中鍵的無序和不可重復的特性。

  TreeSet 實現了SortedSet接口,SortedSet 有排序的能力,意味着TreeSet 也有排序的能力,它是使用二叉樹進行排序的,不允許放入 null 值。

    ①HashSet:按照Hash算法來存取集合中的對象,存取速度比較快。

    ②TreeSet:實現了SortedSet 接口,能對集合中的對象進行排序。

    ③LinkedHashSet:內部使用鏈表維護元素順序,因此遍歷時返回的是插入順序。具有HashMap 的查詢速度。

(3) HashMap(以鍵值對形式存儲)

  Map 存在的意義就是為了快速查找,因為鍵是不可重復的,因此可以通過鍵直接找到值。

  實現Map 接口的子類有三個,HashMap、HashTable、TreeMap。

  HashMap 和 HashTable 底層都是Hash 表結構,不一樣的是:HashMap 的線程是不安全的,允許鍵值對為null,而HashTable 是線程安全的,不允許鍵值對為null,兩者的使用要看具體情況而定。

  TreeMap 實現了SortedMap 接口,底層是二叉樹,可用於給 Map 集合中的鍵值進行排序。且TreeMap的線程是不同步的。

    Map中元素,可以將key序列和value序列單獨抽取出來。

      使用 keySet() 抽取 key 序列,將 map 中的所有 keys 生成一個 Set。

      使用 values() 抽取 value 序列,將 map 中的所有values 生成一個 Collection。

    為什么一個生成Set,而一個生成 Collection?

      因為 key 總是獨一無二的,而 value 允許重復。

    ①HashMap:基於散列表的實現,插入和查詢鍵值對的開銷是固定的。

    ②TreeMap:基於紅黑樹的數據結構,遍歷時取得的數據是經過內部排序的,同時也是唯一一個帶有 subMap 方法的 Map。

    ③LinkedHashMap:內部使用鏈表維護元素順序,因此遍歷時返回的是插入次序。

 

ArrayList、HashSet、HashMap都在 java.util 包下

  ArrayList

    構造方法-----如果不傳參數,默認底層數組的長度是10;如果傳了參數,則底層數組的長度和參數相同。

    size方法-----返回集合的長度(添加才算)。

    add方法-----向集合中添加元素,每添加一個,長度就加1,size++。

      添加元素時,一旦長度超過底層數組長度則自動擴容,每次擴展遠長度*1.5  ------oldCapacity+(oldCapacity>>1)

      使用add方法向指定的 List 索引中添加元素,如果當前元素有內容,則該位置的元素及其后續元素的索引會自動加1

    get方法-----傳下標,取元素。

    remove-----傳下標,刪除元素。

    contains-----傳一個元素,返回元素是否存在於集合中。

  HashSet

    不能通過 get方法來取出元素,需要通過增強 for循環來遍歷輸出。

  HashMap-----映射,鍵值對

    put方法-----存放,過程中鍵的值不可重復,重復會覆蓋掉原來的值。

    get方法-----傳key,取value。

    HashMap不支持增強 for循環,要輸出集合中的元素,可通過keySet()方法,轉換為Set,然后輸出。

    containsKey方法,判斷key是否存在。

    containsValue方法,判斷value是否存在。

Iterator 是集合類的通用遍歷方式

    

若有錯誤之處,歡迎指正。謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM