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

如何仅用ArrayList、subList()和contains()方法查找并打印重复值

从ArrayList中提取重复元素的正确实现

原代码的问题点

  • 初始化dupList时直接用list.subList(1, list.size()),把原列表从索引1开始的所有元素都塞进结果里,完全偏离了收集重复元素的需求
  • if(list.contains(list.get(i)))这个判断毫无意义,因为当前元素本来就在原列表里,会导致所有元素都被重复添加进结果
  • 没有做去重处理,同一个重复值会被多次加入结果列表

正确实现代码

import java.util.ArrayList;

public class DuplicateFinder {
    public static void main(String[] args) {
        // 示例测试列表
        ArrayList<Integer> numList = new ArrayList<>();
        numList.add(2);
        numList.add(3);
        numList.add(4);
        numList.add(4);
        numList.add(5);
        
        ArrayList<Integer> numList2 = dups(numList);
        System.out.println("The following numbers were duplicated in the ArrayList: " + numList2);
    }

    public static ArrayList<Integer> dups(ArrayList<Integer> list) {
        // 初始化空列表存储重复元素
        ArrayList<Integer> dupList = new ArrayList<>();
        
        for (int i = 0; i < list.size(); i++) {
            Integer currentNum = list.get(i);
            // 生成当前索引之后的子列表,只检查后续元素是否有重复
            ArrayList<Integer> subList = new ArrayList<>(list.subList(i + 1, list.size()));
            
            // 两个判断:1. 当前元素在后续子列表中存在;2. 该元素还没被加入结果列表(去重)
            if (subList.contains(currentNum) && !dupList.contains(currentNum)) {
                dupList.add(currentNum);
            }
        }
        return dupList;
    }
}

逻辑说明

  1. 循环遍历原列表的每一个元素,每次取出当前元素currentNum
  2. 创建当前索引i之后的子列表(从i+1到列表末尾),这样只检查当前元素在后续位置是否重复出现,完全匹配你最初的思路
  3. 双重判断保证:既确认当前元素是重复的,又避免同一个重复值被多次添加到结果里
  4. 测试示例[2,3,4,4,5]的输出结果为[4],符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:05:32