Java——遍历List过程中添加和删除元素的问题

本文详细介绍了Java中遍历List的三种常见方法:使用for循环、增强for循环及迭代器。探讨了每种方法的适用场景,如遍历过程中增删元素的最佳实践,帮助开发者选择最合适的遍历策略。

遍历元素最常见的三种方法:

    //第三种遍历【利用迭代器】
    private static void loopList3(List<String> strList) {
        Iterator<String> itr = strList.iterator();
        while (itr.hasNext()){
            String tmp = itr.next();
            if("000".equals(tmp)){
                itr.remove();
            }else{
                System.out.println(tmp);
            }
        }
    }
      //第二种遍历【String tmp:strList】
    private static void loopList2(List<String> strList) {
        for(String tmp:strList){
            System.out.println(tmp);
        }
    }
      //第一种遍历【for(int i =0;)】
    private static void loopList1(List<String> strList) {
        int size = strList.size();
        for(int i=0;i<size;i++){
            String tmp = strList.get(i);
            if(i==0){
                strList.add(3,"newStr");
                size++;
            }
            System.out.println(tmp);
        }
  • 如果仅仅是遍历,可以用第二种遍历方式,简单方便;这种遍历方式会报出java.util.ConcurrentModificationException异常

  • 如果遍历过程中需要移除元素,可以用第三种遍历方式(迭代器),利用Iterator的remove方法;

  • 如果遍历过程中需要增加元素,可以用第一种遍历方式(利用下标遍历),每次添加元素后,在一次循环结束前要修改List的size。当有元素插入的时候,size值加上新插入元素的个数。

### Java Stream API 遍历两个 List 对象 在 Java 中,可以利用 `Stream` 的功能来高效地遍历并处理两个 `List` 对象的数据。通过组合使用 `filter` `anyMatch` 方法,能够轻松实现对两个集合的比较操作。 以下是基于提供的引用内容以及扩展知识的具体实现方式: #### 示例代码 假设我们有两个 `List<String>` 类型的对象 `listA` `listB`,目标是比较它们的内容,并找出存在于 `listA` 而不存在于 `listB` 的元素。 ```java import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // 初始化两个列表 List<String> listA = Arrays.asList("one", "two", "three"); List<String> listB = Arrays.asList("one", "three"); // 使用 Stream 找出 listA 存在而 listB 不存在的元素 List<String> difference = listA.stream() .filter(item -> !listB.contains(item)) // 过滤掉 listB 中已有的项 .collect(Collectors.toList()); // 输出结果 System.out.println(difference); // 输出 [two] } } ``` 上述代码展示了如何通过 `Stream` 来筛选出仅属于某个集合的独特元素[^1]。这里的关键在于使用了 `filter` 方法配合逻辑判断条件完成过滤操作。 如果需要更复杂的场景比如涉及自定义对象而非简单的字符串,则可以通过重写类中的 `equals()` `hashCode()` 方法或者指定特定属性作为匹配依据来进行更加精确的操作[^3]。 对于更为复杂的情况——当两者的类型不一致(例如一个是 `HashMap` 另外一个是基本类型的容器),则可能需要用到键值提取等方式先统一化再做进一步分析[^5]。 #### 更加通用化的解决方案 下面提供一段适用于不同数据结构之间差异计算的例子: ```java // 假设 A 是 HashMap 形式的 List, B 则保持原样为 String. List<Map<String, String>> listAMap = Arrays.asList( Map.of("key", "one"), Map.of("key", "two"), Map.of("key", "three") ); List<String> listBStrings = Arrays.asList("one", "three"); // 提取 key 并转换成单独的 List List<String> keysFromMap = listAMap.stream() .map(mapItem -> mapItem.get("key")) .collect(Collectors.toList()); // 计算差集 keysFromMap.removeAll(listBStrings); System.out.println(keysFromMap); // 结果 ["two"] ``` 此段程序首先将 `HashMap` 表达形式转化为普通的 `String` 数组以便后续处理。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小技工丨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值