List自己是Collection接口的子接口,具有了Collection的全部方法。如今學習List體系特有的共性方法,查閱方法發現List的特有方法都有索引,這是該集合最大的特色。數組
List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素能夠重複。數據結構
|--ArrayList:底層的數據結構是數組,線程不一樣步,ArrayList替代了Vector,查詢元素的速度很是快。併發
|--LinkedList:底層的數據結構是鏈表,線程不一樣步,增刪元素的速度很是快。學習
|--Vector:底層的數據結構就是數組,線程同步的,Vector不管查詢和增刪都巨慢。線程
1,添加:對象
add(index,element) :在指定的索引位插入元素。索引
addAll(index,collection) :在指定的索引位插入一堆元素。接口
2,刪除:element
remove(index) :刪除指定索引位的元素。 返回被刪的元素。rem
3,獲取:
Object get(index) :經過索引獲取指定元素。
int indexOf(obj) :獲取指定元素第一次出現的索引位,若是該元素不存在返回-1;
因此,經過-1,能夠判斷一個元素是否存在。
int lastIndexOf(Object o) :反向索引指定元素的位置。
List subList(start,end) :獲取子列表。
4,修改:
Object set(index,element) :對指定索引位進行元素的修改。
5,獲取全部元素:
ListIterator listIterator():list集合特有的迭代器。
List集合支持對元素的增、刪、改、查。
List集合由於角標有了本身的獲取元素的方式: 遍歷。
for(int x=0; x<list.size(); x++){
sop("get:"+list.get(x));
}
在進行list列表元素迭代的時候,若是想要在迭代過程當中,想要對元素進行操做的時候,好比知足條件添加新元素。會發生.ConcurrentModificationException併發修改異常。
致使的緣由是:
集合引用和迭代器引用在同時操做元素,經過集合獲取到對應的迭代器後,在迭代中,進行集合引用的元素添加,迭代器並不知道,因此會出現異常狀況。
如何解決呢?
既然是在迭代中對元素進行操做,找迭代器的方法最爲合適.但是Iterator中只有hasNext,next,remove方法.經過查閱的它的子接口,ListIterator,發現該列表迭代器接口具有了對元素的增、刪、改、查的動做。
ListIterator是List集合特有的迭代器。
ListIterator it = list.listIterator;//取代Iterator it = list.iterator;
可變長度數組的原理:
當元素超出數組長度,會產生一個新數組,將原數組的數據複製到新數組中,再將新的元素添加到新數組中。
ArrayList:是按照原數組的50%延長。構造一個初始容量爲 10 的空列表。
Vector:是按照原數組的100%延長。
注意:對於list集合,底層判斷元素是否相同,其實用的是元素自身的equals方法完成的。因此建議元素都要複寫equals方法,創建元素對象本身的比較相同的條件依據。
LinkedList:的特有方法。
addFirst();
addLast();
在jdk1.6之後。
offerFirst();
offerLast();
getFirst():獲取鏈表中的第一個元素。若是鏈表爲空,拋出NoSuchElementException;
getLast();
在jdk1.6之後。
peekFirst();獲取鏈表中的第一個元素。若是鏈表爲空,返回null。
peekLast();
removeFirst():獲取鏈表中的第一個元素,可是會刪除鏈表中的第一個元素。若是鏈表爲空,拋出NoSuchElementException
removeLast();
在jdk1.6之後。
pollFirst();獲取鏈表中的第一個元素,可是會刪除鏈表中的第一個元素。若是鏈表爲空,返回null。
pollLast();