兩種類型的List:
ArrayList:它長於隨機訪問元素,但是在List的中間插入和移除元素時比較慢。
|-用contains()方法來確定對象是否在列表中。
|-若移除一個對象,則可以將這個對象的引用傳遞給remove()方法。
|-indexOf()方法返回查詢對象在List中的位置(從零開始),不存在的話返回-1。
|-subList()方法允許你很容易的從較大的列表中創建出一個片段,其中兩個參數start,end,截取的是從start到end-1。
|-retainAll()方法是一個有效地交集操作
LinkedList:它通過較低的代價在List中間進行插入和刪除的操作,提供優化的順序訪問,LinkedList在隨機訪問上相對較慢。
他在執行某些操作時比ArrayList更高效,但是在隨機訪問對象是就要比ArrayList遜色一些。
|-getFirst(),element()完全一樣,返回列表的頭(第一個元素),但是並不移除。如果List爲空,則拋出NoSuchElementException。peek()方法與上述兩個方法的唯一差異就是List爲空時返回null。
|-removeFirst()和remove()也是完全一樣,他們移除並返回列表的頭,如果List爲空則返回NoSuchElementException。poll()稍有差異,當列表爲空時返回null。
|-addFirst(),add()和addLast()相同,他們都將某個元素插入到列表的尾部。
|-removeLast()移除並返回列表的最後一個元素。
迭代器:
|-使用方法Iterator()要求容器返回一個Iterator。Iterator將準備好返回序列的第一個元素。
|-使用next()獲得序列的下一個元素。
|-使用hasNext()檢查序列中是否還有元素。
|-使用remove()將迭代器新近返回的元素刪除。
有了Iterator就不必爲容器中的元素的數量操心了,那是由hasNext()和next()關心的事情。
如果你只是向前遍歷List,並不打算修改list本身,那麼使用foreach()語法會變得更加簡潔。
Iterator還可以移除由next()產生的最後一個元素,這意味着在調用remove()之前必須先調用next()。
注意:其實迭代器最大的好處並不是用來訪問容器中的對象(因爲for和foreach會做的更好,更簡單),其最大的好處是用來統一對容器的訪問方式。(因爲所有容器都可以通過iterator()方法的到迭代對象。)
ListIterator
她是一個更加強大的Iterator的子類型,她只能用於各種List的訪問,儘管Iterator只能先前移動,但是ListIterator可以雙向移動。
|-創建listIterator對象:ListIterator it= pets.listIterator() ;
|-得到當前位置的前一個和後一個的索引:it.nextIndex(),it.previousIndex()。得到引用:it.next(),it.previous()(也可以在.id()得到索引)
|-可以使用set()方法替換它訪問過的最後一個元素:it.next(),it.set(***)。