List的ArrayList和LinkedList

總述

ArrayList和LinkedList都是直接實現List的接口,List的特點是有序集合(有序集合的意思是可直接通過索引直接訪問,Set可以自動排序,元素不可重複,如果要對自定義的Object去重,那需要重寫equals和hashCode方法,詳情請看我的另一個博文),元素可重複,因此ArrayList和LinkedList也繼承了這個特點。ArrayList是基於基礎的對象數組動態實現的數據結構,它對於隨機訪問(random access)get和set,速度要比LinkedList速度要快。LinkedList是基於鏈表的數據結構,它使用get方法時是按照順序從列表的一段開始檢查,移動指針,直到另一端,但對於添加add和刪除remove操作,LinkedList速度要佔優勢。

附錄API

ArrayList

Return method explain
boolean add(E e) 將指定的元素添加到此列表的尾部
void add(int index,E e) 在此列表中指定的位置插入指定的元素
boolean contains(Object o) 如果此列表中包含指定的元素,則返回 true
E get(int index) 返回此列表中指定位置上的元素
boolean isEmpty() 如果此列表中沒有元素,則返回 true
E remove(int index) 移除此列表中指定位置上的元素
int size() 返回此列表中的元素數
Object[] toArray() 按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的數組
void clear() 移除此列表中的所有元素

LinkedList

Return method explain
boolean add(E e) 將指定的元素添加到此列表的尾部
void add(int index, E element) 在此列表中指定的位置插入指定的元素
void clear() 從此列表中移除所有元素
boolean contains(Object o) 如果此列表包含指定元素,則返回 true
E get(int index) 返回此列表中指定位置處的元素
E remove(int index) 移除此列表中指定位置處的元素
int size() 返回此列表的元素數
E set(int index, E element) 將此列表中指定位置的元素替換爲指定的元素
Object[] toArray() 返回以適當順序(從第一個元素到最後一個元素)包含此列表中所有元素的數組
boolean isEmpty() 如果此列表中沒有元素,則返回 true

從API中看一看出:ArrayList和LinkedList方法基本相同,插入一個元素到集合中,兩個集合都提供了add(int index,E element):void方法,並且LinkedList又提供set(int index,E element):E方法,它們的差別主要是效率問題,有興趣可以自己測試一下

代碼實現

ArrayList

   // 測試add方法
   List<Integer> arrayList = new ArrayList<>();
    // 添加6數據
    arrayList.add(20);
    arrayList.add(25);
    arrayList.add(8);
    arrayList.add(35);
    arrayList.add(38);
    arrayList.add(2, 100);
    for (Integer integer : arrayList) {
        System.out.print(integer + " ");
    }
    // 測試contains方法
    if (arrayList.contains(25)) {
        System.out.println("\r\ntrue");
    }
    // 測試get方法
    System.out.println(arrayList.get(2));
    // 測試isEmpty方法
    if (!arrayList.isEmpty()) {
        System.out.println("is not empty");
    }
    // 測試remove方法
    arrayList.remove(2);
    for (Integer integer : arrayList) {
        System.out.print(integer + " ");
    }
    // 測試size方法
    System.out.println("\r\n" + arrayList.size());
    // 測試toArray方法
    Object[] ig = arrayList.toArray();
    for (Object obj : ig) {
        System.out.print((Integer) obj + " ");
    }
    // 測試clear方法
    arrayList.clear();
    System.out.println("\r\n" + arrayList.size());

運行結果

20 25 100 8 35 38 
true
100
is not empty
20 25 8 35 38 
5
20 25 8 35 38 
0

LinkedList

    List<Integer> linkedList = new java.util.LinkedList<>();
    // 測試add方法
    linkedList.add(56);
    linkedList.add(78);
    linkedList.add(59);
    linkedList.add(77);
    linkedList.add(2, 100);
    for (Integer integer : linkedList) {
        System.out.print(integer + " ");
    }
    // 測試contains方法
    if (linkedList.contains(78)) {
        System.out.println("\r\ntrue");
    }
    // 測試get方法
    System.out.println(linkedList.get(1));
    // 測試remove方法
    System.out.println(linkedList.remove(2));
    // 測試size方法
    System.out.println(linkedList.size());
    // 測試set方法
    linkedList.set(2, 200);
    for (Integer integer : linkedList) {
        System.out.print(integer + " ");
    }
    // 測試isEmpty方法
    if (!linkedList.isEmpty()) {
        System.out.println("\r\ntrue");
    }
    // 測試toArray()方法
    Object obj = linkedList.toArray();
    for (Integer integer : linkedList) {
        System.out.print(integer + " ");
    }

運行結果

56 78 100 59 77 
true
78
100
4
56 78 200 77 
true
56 78 200 77 

應用場景

如果對集合的增刪改的操作頻繁,那就使用LinkedList,如果對集合進行頻繁的隨機訪問,就使用ArrayList。

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