淺談Java中的Iterator接口
使用lambda表達(dá)式遍歷集合
Java8為Iterable接口新增了一個(gè)forEach(Consumer action)默認(rèn)方法,該方法的參數(shù)是一個(gè)函數(shù)接口。而Iterable接口是Collection接口的父接口,因此Collection也可以直接調(diào)用forEach方法。
因?yàn)閒orEach(Consumer action)需要的是一個(gè)函數(shù)式接口,因此可以用Lambda表達(dá)式來(lái)遍歷集合元素。如下例:
public class Test {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
c.add(4);
c.forEach(obj -> System.out.println(obj));
}
}
復(fù)制代碼程序調(diào)用了Consumer中的唯一抽象方法accept(T t)。
使用Iterator遍歷集合元素
Iterator接口的對(duì)象也被稱(chēng)為迭代器。
Iterator接口中包含如下方法:
boolean hasNext():如果迭代器中的集合元素還沒(méi)遍歷完,返回true
Object next():返回集合中的下一個(gè)元素
//查看該方法的源碼可知,next是從-1開(kāi)始的,因此首次調(diào)用的時(shí)候返回的就是索引為0的元素。
void remove():刪除集合里上一次next方法返回的元素
void forEachRemaining(Consumer action):該方法使用Lambda表達(dá)式來(lái)遍歷集合元素
復(fù)制代碼來(lái)看具體例子:
public class Test {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
c.add(4);
Iterator iter = c.iterator();
while(iter.hasNext()){
//next返回的元素是object類(lèi)型,因此需要強(qiáng)制轉(zhuǎn)換
int num = (Integer) iter.next();
if(num==2){
iter.remove();
}
System.out.println(num);
}
System.out.println("刪除之后的集合是"+c);
}
}
復(fù)制代碼使用Lambda表達(dá)式遍歷Iterator
使用Iterator中新增的forEachRemaining(Consumer action)來(lái)遍歷集合,此方法需要的參數(shù)也是一個(gè)函數(shù)式接口,因此可以使用Lambda表達(dá)式。
來(lái)看具體例子:
public class Test {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
c.add(4);
Iterator iter = c.iterator();
iter.forEachRemaining(obj -> System.out.println(obj));
}
}
復(fù)制代碼使用foreach循環(huán)遍歷集合元素
foreach和Iterator接口類(lèi)似,foreach中的循環(huán)變量也不是集合元素本身,而是集合元素的值。修改該值并不會(huì)影響集合元素。并且使用foreach時(shí)不能修改集合元素,否則會(huì)引起ConcurrentModinficationException異常。
來(lái)看具體例子:
public class Test {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
c.add(4);
for(Object i : c){
int num = (Integer)i;
System.out.println(num);
if(num==2){
//引起異常
c.remove(num);
}
}
}
}
復(fù)制代碼以上就是我對(duì)Iterator接口的一些淺見(jiàn),如有不足或錯(cuò)誤之處,歡迎評(píng)論指正。
作者:Gw_gw
鏈接:https://juejin.cn/post/6974222444848480269
來(lái)源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論
圖片
表情
