1. 程式人生 > >Java學習筆記--Collection集合與Map的實現類介紹

Java學習筆記--Collection集合與Map的實現類介紹

  • 陣列和集合的區別:
    1. 長度區別:陣列長度固定,而集合長度可變。
    2. 內容不同:陣列儲存同一種資料型別,而集合可以儲存不同型別的元素。
    3. 元素的資料型別問題:陣列可以儲存基本資料型別,也可以儲存引用資料型別;而集合只能儲存引用型別。
  • LinkedList與ArrayList相比因為其是連結串列實現,具有一些特殊的功能:
    • addFirst() 頭部新增元素
    • addLast() 尾部新增元素
    • removeFirst()
    • removeLast()
    • getFirst()
    • getLast()
  • List:有序、可重複
  • Set:無序(儲存順序和取出順序不一致)、元素唯一
  • Collection類中的contains方法需要用到所比較元素所屬類的equals方法,所以需要讓給類實現父類Object的該方法。(父類該方法預設比較兩個物件的地址)
  • 存入HashSet的物件,其類應當重寫了hashCode方法和equals方法,因為在比較存放的元素是否與前面已存入元素重複時,需要用到存入元素的這兩個方法。HashSet的底層是雜湊表(是一個元素為連結串列的陣列)。
  • LinkedHashSet能夠保證遍歷順序與插入順序一致。
  • TreeSet中的元素會按照自然順序或者根據建立 set 時提供的 Comparator 進行排序,具體取決於使用的構造方法。
    • 當使用無參構造方法時,其排序方式為自然排序。存入TreeSet的物件,其類必須實現了Comparable介面,且必須在類中重寫Comparable介面中的抽象方法compareTo(),該方法中定義了對兩個元素進行比較的方法。
    • TreeSet的底層實現為紅黑樹,第一個元素直接作為根節點,後面節點與前面所有節點進行比較,小的放左邊,大的放右邊。遍歷的時候前序遍歷二叉樹,出來的結果就是元素按從小到大排列。
    • 當使用帶參構造方法時,其排序方式根據傳入的Comparator子類物件進行。所以必須定義一個用來比較的類,該類必須實現了Comparator介面,且需要重寫其中的compare(T o1, T o2)方法,在該方法中定義比較兩個元素的規則。那麼回到最初,建立TreeSet物件時,傳入帶參構造方法中的引數就是定義的Comparator子類物件。(其實可以在帶參構造方法的括號中使用匿名內部類來例項化一個Comparator介面的子類)
  • Collections工具類中的方法能夠實現對List中元素的排序、二分查詢、反轉順序、打亂順序、選出最大最小值等各種操作。其中對列表中元素進行排序和選取最值的方法需要元素所在類實現Comparable介面,並重寫介面中的抽象方法compareTo();或者在sort方法、max方法中傳入Comparator的子類物件,重寫其中的compare(T o1, T o2)方法。(第二種可以不定義Comparator子類,直接在傳入的引數中建立匿名內部類物件)