List接口

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();

相關文章
相關標籤/搜索