遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素

这篇具有很好参考价值的文章主要介绍了遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、遍历集合List的五种方法

测试数据

List<String> list = new ArrayList<>();
list.add("A");list.add("B");list.add("C");

1. 普通for循环

普通for循环,通过索引遍历

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

2. 增强for循环

增强for循环,数组以及所有Collection集合都可以使用增强for循环遍历。遍历集合的实际原理为获取集合的iterator迭代器对象进行迭代遍历。

for (String s : list) {
    System.out.println(s);
}

3. Iterator迭代器遍历

Collection接口继承自Iterable接口,所有Collection集合都必须实现iterator()方法返回一个Iterator迭代器对象。因此可以通过list的iterator()方法获取迭代器对象来进行遍历。并且可在迭代过程中调用iterator.remove()安全移除当前元素。

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String s = iterator.next();
    if (s.equals("B")) iterator.remove();
    System.out.println(s);
}

4. ListIterator迭代器遍历

所有List集合都必须实现一个listIterator()方法,返回一个ListIterator迭代器对象。ListIterator 是 Iterator 的子接口,除了可以从前往后遍历外,还可以反向遍历,即从后往前遍历。还可以在遍历过程中使用listIterator.add()方法在当前遍历位置之后插入元素,使用listIterator.set() 方法修改当前元素,以及使用listIterator.remove()移除当前元素。

ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
    String element = listIterator.next();
    if (element.equals("B")) {
        // 修改当前元素
        listIterator.set("D");
        
        // 在当前元素后面插入一个新元素
        listIterator.add("E");
        
        //将迭代器指针移动到前一个元素,然后进行删除
        listIterator.previous();
        listIterator.remove();
    }
}
System.out.println(list); // 输出 [A, D, C]

5. list.forEach(lambda表达式)

list.forEach(element -> {
    // 使用 element
    System.out.println(element);
});

二、如何在遍历集合过程中安全移除元素

如果在使用 Iterator 或 ListIterator 遍历集合的过程中,使用了list.remove() 方法来移除元素,而没有通过迭代器自身的 remove() 方法,就有可能导致 ConcurrentModificationException。这是因为list内部维护了一个修改计数器modCount, 记录list中添加和删除元素的次数,迭代器对象内部会维护一个迭代器修改计数器expectedModCount,如果被非迭代器方法修改了list,导致modCount增加了而expectedModCount没有增加,导致二者不想等于是在check时抛出异常。

遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素,# Java集合全解,list,Java文章来源地址https://www.toymoban.com/news/detail-636105.html

  • 因此在增强for循环中不能添加或移除元素。
  • 需要使用Iterator 或 ListIterator 来迭代遍历集合,并且使用迭代器的方法来移除或添加元素。

到了这里,关于遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java遍历Map的五种方式

    java中遍历map一般有五种方法,从最早的Iterator,到java5支持的foreach,再到java8的Lambda表达式。 如果只是获取key,或者value,推荐使用keySet或者values方式 如果同时需要key或者value推荐使用entrySet 如果需要在遍历过程中删除元素推荐使用Iterator 如果需要在遍历过程中增加元素,可

    2024年02月03日
    浏览(55)
  • Redis的五种数据类型(string、hash 、list、set、zset)

                     Redis 提供了丰富的数据类型,常见的有五种: String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合) 。         String 是最基本的 key-value 结构,key 是唯一标识,value 是具体的值,value其实不仅是字符串, 也可以是数字(整

    2024年01月25日
    浏览(54)
  • 初识RabbitMQ(RMQ的五种消息模型介绍以及使用演示)

    RabbitMQ官方提供了5个不同的Demo示例,对应了不同的消息模型: 简单队列 Work模式 广播模式 路由模式 主题模式 其实我比较喜欢将他们分成三类: 1.简单队列:一个生产者,一个消费者。(名师指导,1V1) 2.Work模式:一个生产者,多个消费者。但是一条消息只能够给到一个人

    2023年04月08日
    浏览(43)
  • 数组求和的五种方法

    // 数组求和的方法 let arr = [1,2,3,4,5] // 方法一:递归 function sum(arr){ const len = arr.length; if(len === 0) { return 0; } else if(len === 1){ return arr[0]; } else { return arr[0] + sum(arr.slice(1)); } } // 方法二:循环 function sum(arr) { let s = 0; for(let i=0; iarr.length; i++){ s += arr[i] } return s; } // 方法三:map-reduce

    2024年02月10日
    浏览(45)
  • Hive导入数据的五种方法

            在Hive中建表成功之后,就会在HDFS上创建一个与之对应的文件夹,且 文件夹名字就是表名 ; 文件夹父路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse; 也可以在建表的时候使用location语句指定任意路径。         不管路径在哪里,只有把数

    2024年01月18日
    浏览(38)
  • Linux清空日志的五种方法

    在Linux中,有多种方法可以清空日志文件。下面是五种常用的方法: 使用truncate命令: truncate命令可以将文件截断为指定大小或清空文件内容。 示例:清空名为logfile.log的日志文件 使用cat命令重定向: cat命令可以将标准输入重定向到文件,使用空内容覆盖文件内容。 示例:

    2024年02月11日
    浏览(40)
  • 隐藏服务器IP的五种方法

    随着互联网的不断发展,用户们在日常使用通信设备访问网站时的风险也在不断增大。因为IP 地址对 Internet 上的每个人都是可见的。根据 IP 地址,其他互联网用户可以跟踪用户的位置、用户使用哪个提供商连接到互联网等等。因此许多用户都在寻求隐藏IP地址的方法,翔域云

    2024年02月07日
    浏览(54)
  • axios发送请求的五种方法详解

    1、带参数 // 方式一: //请求的地址为 localhost:8080/url?id=1         axios.get(\\\'/url\\\', {params: {id: 1}})   // 方式二: // 请求的地址为 localhost:8080/url?id=2 axios({     methods: \\\'get\\\',     url: \\\'/url\\\',     params: {         id: 2     } }) 2、不带参数 // 方式一:  axios({ methods: \\\'get\\\', url: \\\'/url\\\' }) // 方式二

    2024年04月25日
    浏览(34)
  • 小程序页面之间数据传递的五种方法

    使用 wx.navigateTo() 时,在 url 中拼接,这种方法适用于数据量少的情况 跳转前A页面在 url 中拼接参数,参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 分隔; 跳转到B页面在生命周期函数 onLoad 中接收 如果需要传递对象或数组,需先将对象或数据转为JSON字符

    2024年02月10日
    浏览(47)
  • linux杀死进程的五种方法(kill)

    添加链接描述 相关博主的链接; 方法一:通过kill 进程id的方式可以实现 首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id: 然后通过 kill 3781 就可以关闭进程了. 补充: kill -9 来强制终止退出, 例如: kill -9 3781 特殊用法: kill -STOP [pid

    2024年02月02日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包