You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java开发问题:如何移除ArrayList中小于指定值的元素及其后一个元素?

解决ArrayList移除小于10元素及其后一个元素的问题

嘿,我明白你的问题了!你现在需要处理ArrayList,当里面有元素小于10时,不仅要移除这个元素,还要把它后面的那个元素一起删掉,但你当前的代码只是把大于10的元素筛选出来,完全没处理“连带移除后一个元素”的逻辑,而且用for-each循环也没法灵活控制索引,这就是问题的核心所在。

先分析你现有代码的问题

  • 你用了for-each循环遍历原列表,这种遍历方式只能逐个获取元素,无法跟踪元素的索引位置,自然也就没法定位到当前元素的下一个元素,更别说处理“移除后一个元素”的需求了。
  • 你的逻辑只是把大于10的元素加入新列表,完全没考虑到:如果某个元素小于10,哪怕它后面的元素大于10,也需要一起被移除(比如你示例里的25,本身大于10,但因为前面的4小于10,所以也要被移除)。

解决方案:用普通for循环控制索引

这里给你两种可行的方案,推荐第一种(创建新列表),因为它更安全,不会出现并发修改异常,逻辑也更清晰。

方案1:创建新列表存储结果(推荐)

这种方式不修改原列表,而是遍历原列表,把符合要求的元素加入新列表,遇到小于10的元素时直接跳过当前和下一个元素:

Scanner sc = new Scanner(System.in);
int numberOfMeasurements = sc.nextInt();
ArrayList<Integer> measurements = new ArrayList<>();
for(int i = 0; i < numberOfMeasurements; i++) {
    measurements.add(sc.nextInt());
}

ArrayList<Integer> result = new ArrayList<>();
// 手动控制索引i的增量,灵活处理跳过逻辑
for (int i = 0; i < measurements.size(); ) {
    int current = measurements.get(i);
    if (current < 10) {
        // 遇到小于10的元素,跳过当前和下一个元素
        i += 2;
    } else {
        // 元素符合要求,加入结果列表,移动到下一个元素
        result.add(current);
        i += 1;
    }
}

measurements = result;
System.out.println(measurements);

代码解释:

  • 用普通for循环代替for-each,这样我们可以手动控制索引i的变化。
  • 当遇到小于10的元素时,直接让i += 2,跳过当前元素和它的下一个元素,不加入结果列表。
  • 如果当前元素大于等于10,就把它加入结果列表,然后i += 1继续处理下一个元素。
  • 边界情况也能处理:如果最后一个元素刚好小于10,i += 2后会超出列表长度,循环自动结束,不会报错。

方案2:直接在原列表上修改

如果你一定要修改原列表,可以用这种方式,但需要注意移除元素后索引的变化(因为移除元素后,后面的元素会前移):

Scanner sc = new Scanner(System.in);
int numberOfMeasurements = sc.nextInt();
ArrayList<Integer> measurements = new ArrayList<>();
for(int i = 0; i < numberOfMeasurements; i++) {
    measurements.add(sc.nextInt());
}

// 在原列表上修改,注意索引的调整
for (int i = 0; i < measurements.size(); ) {
    int current = measurements.get(i);
    if (current < 10) {
        // 先移除当前元素,此时后面的元素前移,下一个元素的索引还是i
        measurements.remove(i);
        // 如果还有元素存在,移除原来的下一个元素(现在的i位置)
        if (i < measurements.size()) {
            measurements.remove(i);
        }
        // 移除后不需要i++,因为下一个要处理的元素已经移到i位置了
    } else {
        // 元素符合要求,移动到下一个元素
        i++;
    }
}

System.out.println(measurements);

代码解释:

  • 当移除当前元素后,列表的长度会减1,后面的元素都会前移一位,所以原来的“下一个元素”现在处于索引i的位置,这时候直接移除i位置的元素即可。
  • 移除后不需要执行i++,因为下一个要处理的元素已经移到了i的位置;如果元素符合要求,就正常执行i++。

内容的提问来源于stack exchange,提问作者user16937037

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:07:39