Collection集合

首先我覺的要明白什麼是集合?是幹嘛的?

集合:集合是java中提供的一種容器,可以用來存儲多個數據

集合和數組既然都是容器,它們有什麼區別呢?

  • 數組的長度是固定的。集合的長度是可變的。
  • 數組中存儲的是同一類型的元素,可以存儲任意類型數據。集合存儲的都是引用數據類型。如果想存儲基本類型數據需要存儲對應的包裝類型。

Collection常用功能:

    1.boolean add​(E e) 往集合中添加一個元素
    2.void clear​() 從此集合中刪除所有元素
    3.boolean contains​(Object o) 判斷集合中是否包含指定的元素
    4.boolean isEmpty​() 判斷集合是否爲空(沒有元素),如果爲空返回true
    5.boolean remove​(Object o) 刪除集合中的指定元素,如果刪除返回true
    6.int size​() 返回此集合中的元素數
    7.Object[] toArray​() 將集合轉成數組

下面是集合繼承體系圖:
在這裏插入圖片描述
有關Collection中的方法可不止上面這些,其他方法可以自行查看API學習。

代碼演示:

 public static void main(String[] args) {
        // 我們學習Collection集合中的方法,編譯看左邊,我們使用的方法都是來自Collection接口
        // 多態
        // 接口            變量名 = new 實現類();
        Collection<String> coll = new ArrayList<>();
        // 1.boolean add​(E e) 往集合中添加一個元素
        coll.add("王寶強");
        coll.add("謝霆鋒");
        coll.add("賈乃亮");
        coll.add("陳羽凡");
        System.out.println(coll);
        // 2.void clear​() 從此集合中刪除所有元素
        // coll.clear();

        // 3.boolean contains​(Object o) 判斷集合中是否包含指定的元素
        System.out.println(coll.contains("賈乃亮")); // true
        System.out.println(coll.contains("杜海濤")); // false

        // 4.boolean isEmpty​() 判斷集合是否爲空(沒有元素),如果爲空返回true
        System.out.println(coll.isEmpty());

        // 5.boolean remove​(Object o) 刪除集合中的指定元素,如果刪除返回true
        System.out.println(coll.remove("王寶強")); // true
        System.out.println(coll.remove("大郎")); // false

        // 6.int size​() 返回此集合中的元素數
        System.out.println(coll.size());
        System.out.println(coll);
        System.out.println("------");
        // 7.Object[] toArray​() 將集合轉成數組
        Object[] objects = coll.toArray();
        for (int i = 0; i < objects.length; i++) {
            Object obj = objects[i];
            System.out.println(obj);
        }
    }

List接口:

List接口的特點:

1、可以重複
2、有序
3、有索引

常用的List: ArrayList(Vector)、LinkedList

使用List接口中的常用方法:

void add​(int index, E element) 將指定的元素插入此列表中的指定位置(可選操作)。
E get​(int index) 返回此列表中指定位置的元素。
E remove​(int index) 刪除該列表中指定位置的元素(可選操作)。
E set​(int index, E element) 用指定的元素(可選操作)替換此列表中指定位置的元素。

代碼演示:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println("list = " + list);
        System.out.println("list.get(3) = " + list.get(3));

        //[1,1,5,2,3]
        //void add​(int index, E element) 將指定的元素插入此列表中的指定位置(可選操作)。
        list.add(2,5);
        System.out.println("list = " + list);

        //E get​(int index) 返回此列表中指定位置的元素。
        Integer integer = list.get(4);
        System.out.println("integer = " + integer);

        //E remove​(int index) 刪除該列表中指定位置的元素(可選操作)。
        Integer removeEle = list.remove(2);//[1,1,5,2,3]
        System.out.println("removeEle = " + removeEle);

        System.out.println("list = " + list); //[1, 1, 2, 3]
        //注意下標和泛型是Integer的時候,remove可能會誤導
        boolean isRemove = list.remove(Integer.valueOf(9));
        System.out.println("isRemove = " + isRemove);
        System.out.println("list = " + list);   //[1, 1, 3]

        //E set​(int index, E element) 用指定的元素(可選操作)替換此列表中指定位置的元素。
        //增刪查改
        //[1, 1, 2, 3]
        Integer setObj = list.set(1,10);
        System.out.println("list = " + list);
        System.out.println("setObj = " + setObj);
    }

ArrayList底層

通過源碼可以看到ArrayList底層其實是個數組,元素增刪慢,查找快,也是我們使用最多的。

Object[] elementData = {};

1、第一次添加元素,把elementData通過Arrays.copyOf(elementData,
newCapacity(minCapacity))擴容成默認的長度10
Arrays.copyOf(數組,新的長度),把數組擴容到新的長度,並且保留原來的數據
它的底層是System.arrayCopy()
2、第十次添加元素的時候,會觸發擴容,擴容成原來程度的1.5倍

代碼演示:

ArrayList<Integer> list = new ArrayList<>();
    list.add(1); //初始化數組的容量是10
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);

LinkedList集合

  • java.util.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。

LinkedList是List的子類,List中的方法LinkedList都是可以使用,這裏就不做詳細介紹,在開發時,LinkedList集合也可以作爲堆棧,隊列的結構使用。

Vector集合

java.util.Vector集合數和ArrayList一樣底層使用數組結構。元素增刪慢,查找快,與ArrayList不同的是Vector是線程
安全的,速度慢,工作中很少使用。

  • Enumeration elements() 返回此Vector的枚舉(迭代器的前身)。

說到最後總結一下:
如何選擇集合?
1.如果元素不能重複使用:

Set:
HashSet: 綜合性比較強 LinkedHashSet: 保留了順序,增刪比較慢(多維護一個鏈表來存儲數據)

2.如果元素可以重複:

List:
LinkedList:增刪多,查找少,只在頭尾加元素 ArrayList: 綜合性比較強,當不確定使用什麼的時候就使用

發佈了49 篇原創文章 · 獲贊 171 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章