如何遍历一个容器

本文介绍了Java中遍历容器的三种方式:for-each循环,通过迭代器以及使用聚合操作。for-each简单易用,但不支持在遍历过程中删除元素;迭代器则允许在遍历中删除,提供了remove方法;聚合操作提供了另一种遍历方式,适合特定场景。

遍历容器有三种方式:

1. 使用for-each遍历容器
2. 使用迭代器`Iterator`遍历容器
3. 使用聚合操作遍历容器

for-each

使用方法如下:

public static void testForeach(Collection<?> c) {
    for (Object o: c) {
		System.out.println(o);
    }
}

需要注意的是,在for-each中不能删除元素,否则会报错。

public static void testForeach(Collection<?> c) {
    for (Object o: c) {
        System.out.println(o);
        if ("a".equals(o)) {
            c.remove(o);
        }
    }
}

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    testForeach(list);
}

上面的代码在运行期间会报错

Exception in thread "main" java.lang.UnsupportedOperationException: remove
	at java.base/java.util.Iterator.remove(Iterator.java:102)
	at java.base/java.util.AbstractCollection.remove(AbstractCollection.java:283)
	at a.Test_1.testForeach(Test_1.java:12)
	at a.Test_1.main(Test_1.java:19)
a

Process finished with exit code 1

使用迭代器Iterator

Iterator接口主要有三个方法

boolean hasNext(); // 判断是否还有元素
E next();		   // 返回下一个元素
void remove();	   // 删除当前元素

使用迭代器遍历集合的代码如下:

public static void testIterator1(Collection<?> c) {
    Iterator<?> iterator = c.iterator();
    while (iterator.hasNext()) {
        Object o = iterator.next();
        System.out.println(o);
    }
}

迭代器中提供了remove方法,并且在遍历的过程中是可以删除元素的

public static void testIterator2(Collection<?> c) {
    Iterator<?> iterator = c.iterator();
    while (iterator.hasNext()) {
        Object o = iterator.next();
        if ("a".equals(o)) {
            iterator.remove();
            continue;
        }
        System.out.println(o);
    }
}

测试代码如下:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    testIterator2(list);
}

运行结果如下:

b
c

Process finished with exit code 0

一般在不需要删除元素时使用for-each,需要删除元素时使用迭代器

聚合操作

使用聚合操作遍历如下:

public static void testAggregate(Collection<?> c) {
    c.stream().forEach(e -> {
        System.out.println(e);
    });
}

测试代码如下:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    testAggregate(list);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值