java迭代器是什么 java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動(dòng)的刪除方法刪除元素?
java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動(dòng)的刪除方法刪除元素?你a<70的時(shí)候是倒數(shù)第二位,也就是66,沒(méi)有拋出異常是因?yàn)橹發(fā)ist大小為5,你刪除66后
java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動(dòng)的刪除方法刪除元素?
你a<70的時(shí)候是倒數(shù)第二位,也就是66,沒(méi)有拋出異常是因?yàn)橹發(fā)ist大小為5,你刪除66后,list大小為4,你第一次遍歷list大小為5的數(shù)組的時(shí)候,66的cursor在index = 4,當(dāng)你刪除后,遍歷list大小為4的數(shù)組時(shí), cursor = 4 = newlist.size()。
ArrayList里的這個(gè)方法就會(huì)判斷l(xiāng)ist已經(jīng)讀取完畢了,所以不會(huì)拋出異常。
1
2
3
public boolean hasNext() {
return cursor != size
}
a < 90的時(shí)候在第二位就發(fā)生了變化,list的大小也發(fā)生了變化
看了下ArrayList的源碼,每次循環(huán)的時(shí)候都會(huì)call這個(gè)方法檢查list的大小是否發(fā)生了變化,但是這個(gè)方法是發(fā)生在hasNext方法之后的
1
2
3
4
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException()
}
在java中集合中迭代是怎么一回事兒?為什么要進(jìn)行集合的迭代?
其實(shí)嚴(yán)格來(lái)說(shuō),迭代是一種設(shè)計(jì)模式,迭代的目的是遍歷某一類(lèi)數(shù)據(jù)集合的內(nèi)容,而無(wú)需了解該類(lèi)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
其實(shí)現(xiàn)思路是:定義一個(gè)迭代器接口,該接口至少聲明兩個(gè)方法,分別是:hasNext(),和next()。通過(guò)hasNext()判斷是否還有可遍歷元素,通過(guò)next()返回可遍歷元素。至于具體實(shí)現(xiàn)則根據(jù)不同需求創(chuàng)建不同實(shí)現(xiàn)類(lèi)即可。
也就是說(shuō),迭代本沒(méi)有編程語(yǔ)言屬性,只不過(guò)幾乎所有的編程語(yǔ)言都會(huì)支持迭代罷了。
在Java中遍歷集合可以不用迭代方式,當(dāng)然,不用迭代方式的遍歷僅限于List接口的實(shí)現(xiàn)類(lèi)。因?yàn)長(zhǎng)ist接口規(guī)定可以通過(guò)集合索引來(lái)取得對(duì)應(yīng)的值,不論這個(gè)List用的是數(shù)組還是鏈表實(shí)現(xiàn)。
但是,Java中的集合不僅僅只有List,還有Set。像這種非List集合是無(wú)法通過(guò)索引來(lái)獲取指定元素的,所以這時(shí)候迭代方式就排上了用場(chǎng)。
除了List和Set之外,Java還有一種雙列集合,又稱(chēng)key-value鍵值對(duì)集合。只不過(guò)這種集合遍歷時(shí)無(wú)法直接通過(guò)迭代方式遍歷。而是通過(guò)折中方式,要么先獲得key值集合,通過(guò)遍歷key來(lái)遍歷map,要么是獲得Map.Entry的集合來(lái)遍歷。
總之,迭代方式不屬于任何編程語(yǔ)言,它只是一種設(shè)計(jì)思想,只不過(guò)大多數(shù)編程語(yǔ)言會(huì)去實(shí)現(xiàn)它罷了,包括Java。
迭代器主要作用是什么?
你好,很高興能為您解答。
迭代器在其實(shí)就是指針,讀取集合或者數(shù)組中的一個(gè)值,讀完以后又指向下一條數(shù)據(jù)。
迭代器是很好用的一個(gè)東西,以java為例,在遍歷list或者map等對(duì)象的時(shí)候,效率比較高,而且能實(shí)現(xiàn)一些for循環(huán)不能實(shí)現(xiàn)的功能。例如remove。
希望我的回答對(duì)你有所幫助
對(duì)于一個(gè)java程序員來(lái)說(shuō),深入了解迭代器的概念重要嗎?
首先來(lái)普及一下迭代器概念。迭代器(iterator)有時(shí)又稱(chēng)游標(biāo)(cursor)是程序設(shè)計(jì)的軟件設(shè)計(jì)模式,可在容器(container,例如鏈表或陣列)上遍訪(fǎng)的接口,設(shè)計(jì)人員無(wú)需關(guān)心容器的內(nèi)容。java迭代器 較多使用在容器中,如數(shù)組鏈表 。
作為一種設(shè)計(jì)模式,迭代器可以用于遍歷一個(gè)對(duì)象,對(duì)于這個(gè)對(duì)象的底層結(jié)構(gòu)開(kāi)發(fā)人員不必去了解。迭代器的使用也十分簡(jiǎn)單?,F(xiàn)在簡(jiǎn)要的總結(jié)下使用迭代 器的好處吧。
1、迭代器可以提供統(tǒng)一的迭代方式。
2、迭代器也可以在對(duì)客戶(hù)端透明的情況下,提供各種不同的迭代方式。
3、迭代器提供一種快速失敗機(jī)制,防止多線(xiàn)程下迭代的不安全操作。
由于Java中數(shù)據(jù)容器眾多,而對(duì)數(shù)據(jù)容器的操作在很多時(shí)候都具有極大的共性,于是Java采用了迭代器為各種容器提供公共的操作接口。使用Java的迭代器iterator可以使得對(duì)容器的遍歷操作完全與其底層相隔離,可以到達(dá)極好的解耦效果。
但是迭代的次數(shù)取決于集合的元素?cái)?shù)量,在刪除或增加集合中的元素的時(shí)候,迭代的次數(shù)會(huì)發(fā)生變化,而向集合的非末尾的位置插入元素導(dǎo)致的結(jié)果會(huì)更致命,會(huì)導(dǎo)致先前迭代出的元素又一次訪(fǎng)問(wèn)到,或者有的元素訪(fǎng)問(wèn)不到。