Collection接口往下繼承產生了三個接口,它們有各自的特色,本文要學習的是具備「有序可重複」特色的 List 接口,它也叫作列表。
java
在列表中,這使得咱們可以精肯定位須要進行操做的元素,由於咱們有列表的索引,它和數組的索引一致,都是從0開始計數。在接下來要學習的方法中,咱們能夠發現不少方法都提供了索引參數,有些方法的返回值則是元素的索引。數組
List 接口也繼承了 ListIterator 接口,這使得 List 中有兩個繼承而來的獲取迭代器的方法,而 List 根據自身特色,又重載了一個方法來獲取從列表中指定位置開始的迭代器。
學習
不要慌亂,雖然 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 接口中的重名方法效果一致,能夠在第三篇博客中閱讀。