Java集合框架_四_List接口

1、List?

    Collection接口往下繼承產生了三個接口,它們有各自的特色,本文要學習的是具備「有序可重複」特色的 List 接口,它也叫作列表。
java

    在列表中,這使得咱們可以精肯定位須要進行操做的元素,由於咱們有列表的索引,它和數組的索引一致,都是從0開始計數。在接下來要學習的方法中,咱們能夠發現不少方法都提供了索引參數,有些方法的返回值則是元素的索引。數組

    List 接口也繼承了 ListIterator 接口,這使得 List 中有兩個繼承而來的獲取迭代器的方法,而 List 根據自身特色,又重載了一個方法來獲取從列表中指定位置開始的迭代器。
學習

2、Why are there so many methods!

    不要慌亂,雖然 List 接口提供了不少方法,而縱觀這些方法,發現能夠分類學習,更容易快速掌握。spa

    (一)自己

        一、int size().net

            返回集合自己的大小。
code

        二、int hashCode()對象

            返回集合的哈希碼值。
blog

    (二)插入

        一、boolean add(E e)繼承

            此方法在列表的尾端加入新元素 e。
索引

            列表發生改變,則返回true。

        二、void add(int index, E element)

            在指定的索引位置插入指定的元素 element,該 element 搶佔了指定的索引位置。而原來索引位置上的元素以及該索引之後的元素,索引值都+1。

            不返回任何值。

// 聲明一個List
List<String> list = new ArrayList<String>();

// 添加元素
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");

System.out.print("插入前:");
for(String str : list) {
	System.out.print(str + "->");
}

list.add(2, "I'm the new guy!");

System.out.print("\n插入後:");
for(String str : list) {
	System.out.print(str + "->");
}
結果:
插入前:1->2->3->4->5->6->
插入後:1->2->I'm the new guy!->3->4->5->6->

        三、boolean addAll(Collection<? extends E> c)

            將指定集合 c 中的全部元素插入到列表的結尾,而新插入的這些元素的順序是由指定集合 c 中迭代器方法返回的順序決定的。

            列表發生改變後,返回true。

        四、boolean addAll(int index, Collection<? extends E> c)

            搶佔 index 索引位置,從該位置開始將指定集合 c 中全部元素插入,插入成功後,新列表的索引也天然而然。

            列表發生改變後,返回true。

    (三)刪除

        一、boolean remove(Object o)

            刪除列表中第一次出現的指定元素 o(若是列表中存在元素 o,返回true,不然返回false)。

            例如:

List<String> list = new ArrayList<String>();

list.add("1");
list.add("2");
list.add("3");
list.add("4");
		
System.out.println("刪除元素【2】:" + list.remove("2"));
System.out.println("刪除元素【5】:" + list.remove("5"));

System.out.print("刪除後的列表:");
for(String str : list) {
    int index = list.indexOf(str);
    if(index != (list.size() - 1)) {
        System.out.print(str + "->");
    } else {
        System.out.print(str);
    }
}
結果:
刪除元素【2】:true
刪除元素【5】:false
刪除後的列表:1->3->4

        二、boolean removeAll(Collection<?> c)

            移除列表中全部包含在指定集合 c 中的元素,至關於移除了列表和集合 c 的交集。

            若是列表因調用該方法而發生改變,則返回true。

        三、boolean retainAll(Collection<?> c)

            和 removeAll 方法相反,retainAll 方法保留的是列表中全部包含在指定集合 c 中的元素,至關於保留了列表和集合 c 的交集。

            若是列表因調用該方法而發生改變,則返回true。

        四、E remove(int index)

            移除指定索引位置上的元素。

            這個方法的返回值很特殊,它返回的是什麼?看代碼:

List<String> list = new ArrayList<String>();

list.add("1");
list.add("2");
list.add("3");
list.add("4");

System.out.println("刪除索引位置爲【1】的元素,返回結果爲:" + list.remove(1));
結果以下:
刪除索引位置爲【1】的元素,返回結果爲:2

        五、void clear()

            清空該列表。

    (四)訪問

        一、E get(int index)

            返回列表中索引爲 index 的元素。

        二、List<E> subList(int fromIndex, int toIndex)

            能夠用開閉區間的方式來看,將索引位置在 [fromIndex, toIndex) 中的元素按照原順序提取出來,組成一個新的列表。

            對該方法返回的新列表的任何操做都不會對原列表產生影響。

            新列表的元素個數 = toIndex - fromIndex

    (五)修改

        一、E set(int index, E element)

            將指定索引位置上的元素替換爲指定的元素 element。這個方法的返回值也比較特殊,和 remove(int index) 方法同樣,都是返回替換以前的元素

    (六)比較、判斷方法

        一、boolean contains(Object o)

            判斷列表中是否存在指定元素 o。

        二、boolean containsAll(Collection<?> c)

            判斷列表中是否存在指定集合 c 中的全部元素,至關於判斷集合 c 是否爲列表的子集

        三、boolean equals(Object o)

            比較列表和指定對象 o 是否相等,而相等的條件也比較苛刻,它要求指定對象也是一個列表,而兩個列表要以相同的順序包含相同的元素。

        四、boolean isEmpty()

            判斷列表中是否有元素存在。

    (七)檢索

        一、int indexOf(Object o)

            在列表中以正向順序查找指定元素 o,返回第一個符合條件的元素索引。但若是列表中不存在該元素,那就返回-1.

        二、int lastIndexOf(Object o)

            和上一個方法相似,惟一的區別是:它返回的是最後一個符合條件的元素索引。

    (八)迭代器

        一、ListIterator<E> listIterator()

            返回列表迭代器,進而能夠使用 ListIterator 接口中的方法。(ListIterator 接口在第二篇博客介紹過)

        二、ListIterator<E> listIterator(int index)

            也返回一個列表迭代器,可是迭代器的起始位置是列表的 index 索引位置。

            代碼容易理解:

List<String> list = new ArrayList<String>();

list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");

ListIterator<String> listIterator = list.listIterator(2);

for(; listIterator.hasNext(); ) {
    System.out.println(listIterator.next());
}
結果:
3
4
5

        三、Iterator<E> iterator()

            普通的返回迭代器的方法,該方法繼承自 Iterable 接口。

    (九)轉換

        一、Object[] toArray()

            將列表中的元素轉換爲由數組來存儲,而元素的順序能夠按照特殊的要求來實現,通常狀況是和列表的索引一一對應。

            該方法返回一個新數組,而對新數組的操做對原列表沒有任何影響。

        二、<T> T[] toArray(T[] a)

            返回按適當順序(從第一個元素到最後一個元素)包含列表中全部元素的數組;返回數組的運行時類型是指定數組的運行時類型。若是指定數組能容納列表,則在其中返回該列表。不然,分配具備指定數組的運行時類型和此列表大小的新數組。此方法和 Collection 接口中的重名方法效果一致,能夠在第三篇博客中閱讀。

相關文章
相關標籤/搜索