浅谈Java中的Iterator接口

愿天堂没有BUG

共 2104字,需浏览 5分钟

 ·

2021-06-23 08:37

使用lambda表达式遍历集合

Java8为Iterable接口新增了一个forEach(Consumer action)默认方法,该方法的参数是一个函数接口。而Iterable接口是Collection接口的父接口,因此Collection也可以直接调用forEach方法。

因为forEach(Consumer action)需要的是一个函数式接口,因此可以用Lambda表达式来遍历集合元素。如下例:

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));
}
}
复制代码

程序调用了Consumer中的唯一抽象方法accept(T t)。

使用Iterator遍历集合元素

Iterator接口的对象也被称为迭代器。

Iterator接口中包含如下方法:

boolean hasNext():如果迭代器中的集合元素还没遍历完,返回true

Object next():返回集合中的下一个元素
//查看该方法的源码可知,next是从-1开始的,因此首次调用的时候返回的就是索引为0的元素。

void remove():删除集合里上一次next方法返回的元素

void forEachRemaining(Consumer action):该方法使用Lambda表达式来遍历集合元素
复制代码

来看具体例子:

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类型,因此需要强制转换
int num = (Integer) iter.next();
if(num==2){
iter.remove();
}
System.out.println(num);
}
System.out.println("删除之后的集合是"+c);
}
}
复制代码

使用Lambda表达式遍历Iterator

使用Iterator中新增的forEachRemaining(Consumer action)来遍历集合,此方法需要的参数也是一个函数式接口,因此可以使用Lambda表达式。

来看具体例子:

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

复制代码

使用foreach循环遍历集合元素

foreach和Iterator接口类似,foreach中的循环变量也不是集合元素本身,而是集合元素的值。修改该值并不会影响集合元素。并且使用foreach时不能修改集合元素,否则会引起ConcurrentModinficationException异常。

来看具体例子:

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);
}
}
}
}
复制代码

以上就是我对Iterator接口的一些浅见,如有不足或错误之处,欢迎评论指正。


作者:Gw_gw
链接:https://juejin.cn/post/6974222444848480269
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报