首頁技術(shù)文章正文

Java培訓(xùn)之List集合

更新時間:2017-06-30 來源:黑馬程序員Java培訓(xùn)學(xué)院 瀏覽量:

List集合因為角標(biāo)有了自己的獲取元素的方式: 遍歷。
for(int x=0; x<list.size(); x++){
sop("get:"+list.get(x));
}
在進(jìn)行l(wèi)ist列表元素迭代的時候,如果想要在迭代過程中,想要對元素進(jìn)行操作的時候,比如滿足條件添加新元素。會發(fā)生.ConcurrentModificationException并發(fā)修改異常。
導(dǎo)致的原因是:
集合引用和迭代器引用在同時操作元素,通過集合獲取到對應(yīng)的迭代器后,在迭代中,進(jìn)行集合引用的元素添加,迭代器并不知道,所以會出現(xiàn)異常情況。
如何解決呢?
既然是在迭代中對元素進(jìn)行操作,找迭代器的方法最為合適.可是Iterator中只有hasNext,next,remove方法.通過查閱的它的子接口,ListIterator,發(fā)現(xiàn)該列表迭代器接口具備了對元素的增、刪、改、查的動作。
 
ListIterator是List集合特有的迭代器。
ListIterator it = list.listIterator;//取代Iterator it = list.iterator;

方法摘要    

 void    add(E e) 將指定的元素插入列表(可選操作)。    

 boolean    hasNext() 以正向遍歷列表時,如果列表迭代器有多個元素,則返回 true(換句話說,如果 next 返回一個元素而不是拋出異常,則返回 true)。    

 boolean    hasPrevious() 如果以逆向遍歷列表,列表迭代器有多個元素,則返回 true。    

 E    next() 返回列表中的下一個元素。    

 int    nextIndex() 返回對 next 的后續(xù)調(diào)用所返回元素的索引。    

 E    previous() 返回列表中的前一個元素。    

 int    previousIndex() 返回對 previous 的后續(xù)調(diào)用所返回元素的索引。    

 void    remove() 從列表中移除由 next 或 previous 返回的最后一個元素(可選操作)。    

 void    set(E e) 用指定元素替換 next 或 previous 返回的最后一個元素(可選操作)。    

 
可變長度數(shù)組的原理:
當(dāng)元素超出數(shù)組長度,會產(chǎn)生一個新數(shù)組,將原數(shù)組的數(shù)據(jù)復(fù)制到新數(shù)組中,再將新的元素添加到新數(shù)組中。
ArrayList:是按照原數(shù)組的50%延長。構(gòu)造一個初始容量為 10 的空列表。
Vector:是按照原數(shù)組的100%延長。
 
注意:對于list集合,底層判斷元素是否相同,其實用的是元素自身的equals方法完成的。所以建議元素都要復(fù)寫equals方法,建立元素對象自己的比較相同的條件依據(jù)。
 
LinkedList:的特有方法。
addFirst();
addLast();
在jdk1.6以后。
offerFirst();
offerLast();
 
getFirst():獲取鏈表中的第一個元素。如果鏈表為空,拋出NoSuchElementException;
getLast();
在jdk1.6以后。
peekFirst();獲取鏈表中的第一個元素。如果鏈表為空,返回null。
peekLast();
 
removeFirst():獲取鏈表中的第一個元素,但是會刪除鏈表中的第一個元素。如果鏈表為空,拋出NoSuchElementException
removeLast();
在jdk1.6以后。
pollFirst();獲取鏈表中的第一個元素,但是會刪除鏈表中的第一個元素。如果鏈表為空,返回null。
pollLast();

本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!

作者:黑馬程序員Java培訓(xùn)學(xué)院

首發(fā):http://java.itheima.com/

分享到:
在線咨詢 我要報名
和我們在線交談!