1. 程式人生 > 實用技巧 >Collection集合概述

Collection集合概述

Collection集合(單列集合)

集合與陣列的區別

  • 陣列的長度是固定的。集合的長度是可變的。
  • 陣列中儲存的是同一型別的元素,可以儲存基本資料型別值。集合儲存的都是物件。而且物件的型別可以不一致。在開發中一般當物件多的時候,使用集合進行儲存
  • 特點
    • list集合儲存的元素可以重複
    • list集合儲存的元素有序
    • 有索引(可用普通for迴圈遍歷)
  • Collection是所有單列集合的父介面,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用於操作所有的單列集合。方法如下:
    • public boolean add(E e): 把給定的物件新增到當前集合中 。
    • public void clear() :清空集合中所有的元素。
    • public boolean remove(E e): 把給定的物件在當前集合中刪除。
    • public boolean contains(E e): 判斷當前集合中是否包含給定的物件。
    • public boolean isEmpty(): 判斷當前集合是否為空。
    • public int size(): 返回集合中元素的個數。
    • public Object[] toArray(): 把集合中的元素,儲存到陣列中
    • 注意: 有關Collection集合的方法可不止這些,其他方法可以自行檢視API學習。

List集合

  • 特點
    • 它是一個元素存取有序的集合。例如,存元素的順序是11、22、33。那麼集合中,元素的儲存就是按照11、22、33的順序完成的)。
    • 它是一個帶有索引的集合,通過索引就可以精確的操作集合中的元素(與陣列的索引是一個道理)。
    • 集合中可以有重複的元素,通過元素的equals方法,來比較是否為重複的元素。
  • 常用方法
    • public void add(int index, E element): 將指定的元素,新增到該集合中的指定位置上。
    • public E get(int index):返回集合中指定位置的元素。
    • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
    • public E set(int index, E element):用指定元素替換集合中指定位置的元素,返回值的更新前的元素。

ArrayList集合

  • Arraylist集合底層為一個數組結構,因此具有查詢快,增刪慢的特性
  • 因為陣列建立後大小是固定的,每次增加或者刪除一個元素都要建立一個新的陣列
  • 大小可變的陣列
  • 常用方法
    • public boolean add(E e) :將指定的元素新增到此集合的尾部。
      public E remove(int index) :移除此集合中指定位置上的元素。返回被刪除的元素。
      public E get(int index) :返回此集合中指定位置上的元素。返回獲取的元素。
      public int size() :返回此集合中的元素數。遍歷集合時,可以控制索引範圍,防止越界。

LinkedList集合

  • LinkedList集合底層為一個雙向連結串列結構,增刪快,查詢慢

  • 因為連結串列是無序的,查詢元素時每次都要從連結串列的兩邊查起,但是增刪元素只需要斷開節點,改變節點的指標指向要新增的元素或者指向要刪除的下一個元素節點即可

  • 實際開發中對一個集合元素的新增與刪除經常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。

    • 常用方法
    • public void addFirst(E e):將指定元素插入此列表的開頭。
    • public void addLast(E e):將指定元素新增到此列表的結尾。
    • public E getFirst():返回此列表的第一個元素。
    • public E getLast():返回此列表的最後一個元素。
    • public E removeFirst():移除並返回此列表的第一個元素。
    • public E removeLast():移除並返回此列表的最後一個元素。
    • public E pop():從此列表所表示的堆疊處彈出一個元素。
    • public void push(E e):將元素推入此列表所表示的堆疊。
    • public boolean isEmpty():如果列表不包含元素,則返回true。

Set集合

  • 特點
    • set集合儲存元素無序
    • set集合儲存元素不能重複

HashSet集合

  • 底層是hash表結構,查詢迅速非常快

Hash表

  • 陣列+連結串列

  • 陣列+紅黑樹結構

  • Java中在建立物件時,每一個物件對會有一個hash值,即由object類中的hashcode方法獲得,而hashcode方法是一個native方法,本地方法,是作業系統的方法,不是由Java來編寫的,用底層的c或者c++方法編寫,通過本地方法介面呼叫本地方法庫,從庫中獲得。每個物件所獲得的雜湊值都是不同的,如果雜湊值相同,則認為兩個物件相同。而雜湊表結構:陣列中儲存的是不同的雜湊值,將物件儲存在連結串列或者紅黑樹中。所以Hashset集合查詢速度是非常快的

  • hashset方法和equals方法保證陣列的唯一性

  • 如果在集合中要儲存自定義物件,那麼這個集合必須重寫hashcode和equals方法

    public class Student {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o)
                return true;
            if (o == null || getClass() != o.getClass())
                return false;
            Student student = (Student) o;
            return age == student.age &&
                   Objects.equals(name, student.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(name, age);
        }
    }