遍歷刪除list中的元素 java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動(dòng)的刪除方法刪除元素?
java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動(dòng)的刪除方法刪除元素?當(dāng)您是<70時(shí),倒數(shù)第二位是66。您沒(méi)有引發(fā)異常,因?yàn)橐郧暗牧斜泶笮∈?。刪除66后,列表大小
java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動(dòng)的刪除方法刪除元素?
當(dāng)您是<70時(shí),倒數(shù)第二位是66。您沒(méi)有引發(fā)異常,因?yàn)橐郧暗牧斜泶笮∈?。刪除66后,列表大小為4。第一次遍歷列表大小為5的數(shù)組時(shí),指針66位于index=4中。遍歷列表大小為4的數(shù)組時(shí),指針66位于index=4中newlist.size文件()。
ArrayList中的此方法將判斷列表已被讀取,因此不會(huì)引發(fā)異常。
1]]2
3
公共布爾hasnext(){
返回光標(biāo)!=size
}
A< 90,第二位變了,列表的大小也變了
看ArrayList的源代碼,調(diào)用這個(gè)方法檢查列表的大小是否每次都變,但是這個(gè)方法發(fā)生在hasnext方法之后
1
2
3
4
final void checkForComodification(){
if(modCount!=expectedModCount)
拋出新的Concurrentmodificationexception()
}
刪除list集合為什么要用迭代器?
遍歷常用方法時(shí),將使用數(shù)組下標(biāo)。刪除其中一個(gè)元素時(shí),刪除位置的下標(biāo)對(duì)于相應(yīng)數(shù)組中的元素將為空,隨后的數(shù)據(jù)將向前推送,導(dǎo)致最后一個(gè)位置的下標(biāo)為空。當(dāng)你轉(zhuǎn)到最后一個(gè),它將沒(méi)有數(shù)據(jù),然后它將被刪除它的界限。迭代器的原理是只有在有下一項(xiàng)且沒(méi)有下標(biāo)時(shí)才取值,這將確保數(shù)據(jù)的一致性
在STL中,remove()只將要?jiǎng)h除的元素后的元素移到向量的前端,而不是將其刪除。
要實(shí)際刪除它,請(qǐng)使用erase()。
使用迭代器遍歷集合時(shí),刪除元素為何不能用集合定義的remove()方法?
Iterator
Iterator是一種設(shè)計(jì)模式,它是一個(gè)對(duì)象,它可以遍歷和選擇序列中的對(duì)象,開(kāi)發(fā)人員不需要了解序列的底層結(jié)構(gòu)。
迭代器通常被稱(chēng)為“輕量級(jí)”對(duì)象,因?yàn)樗鼈兊膭?chuàng)建成本很低。Java中的迭代器函數(shù)相對(duì)簡(jiǎn)單,只能向一個(gè)方向移動(dòng):
(1)iterator()方法要求容器返回迭代器。第一次調(diào)用迭代器的next()方法時(shí),它返回序列的第一個(gè)元素。
注意:iterator()方法是java.lang.Iterable語(yǔ)言接口,由集合繼承。
(2)使用next()獲取序列中的下一個(gè)元素。
(3)使用hasnext()檢查序列中是否還有元素。
(4)使用remove()刪除迭代器新返回的元素。
Iterator是Java Iterator最簡(jiǎn)單的實(shí)現(xiàn)。為列表設(shè)計(jì)的Listiterator有更多的函數(shù)。它可以從兩個(gè)方向遍歷列表,還可以從列表中插入和刪除元素。
什么是迭代器iterator?
主要有三種方法:使用列表記錄要?jiǎng)h除的數(shù)據(jù),最后刪除所有(list);使用for循環(huán)遍歷,原始寫(xiě)入方法;使用迭代器的remove方法,這也是官方推薦的方法。
如何遍歷刪除一個(gè)list中的特定數(shù)據(jù)?
您好,我認(rèn)為這兩種方法在集合的迭代中是有區(qū)別的:例如,如果您要遍歷集合并在滿(mǎn)足某個(gè)條件時(shí)刪除元素,如果您使用for循環(huán),您將使用集合附帶的remove(),它將更改集合的size()。循環(huán)中會(huì)發(fā)生錯(cuò)誤,但是如果將集合放入迭代器,迭代器迭代可以遍歷并選擇集合中的每個(gè)對(duì)象,而不是更改集合的結(jié)構(gòu),如果將集合放入迭代器,可以使用迭代器的remove()來(lái)避免問(wèn)題