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

如何避免将数组中的重复元素添加到ArrayList?附现有Java代码

解决ArrayList添加元素去重的问题

嘿,我来帮你搞定这个需求~你现在的代码是把数组里的所有元素直接塞进ArrayList,所以会出现重复项。这里有两种实用的修改方案,你可以根据场景选择:

方案一:添加前检查元素是否已存在

这是最直观的入门级写法,在调用add()方法前,先用contains()判断ArrayList里有没有当前元素,只有不存在的时候才添加。修改后的代码如下:

package window1;
import java.util.ArrayList;

public class Mine {
    public static void main(String[] args) {
        ArrayList<String> listName = new ArrayList<>();
        String sal[]={"val","sa","de","dal","val","sa","de"};
        
        for(int i =0;i<sal.length;i++){
            // 核心修改:仅当元素不存在时才添加
            if (!listName.contains(sal[i])) {
                listName.add(sal[i]);
            }
        }
        
        // 遍历输出验证结果
        for(int j=0;j<listName.size();j++){
            System.out.println(listName.get(j));
        }
    }
}

优点:无需额外导入类,逻辑简单易懂;缺点:如果数组元素数量多,contains()方法是O(n)时间复杂度,整体会变成O(n²),效率偏低。

方案二:借助Set实现高效去重(推荐)

Java的Set集合天然不允许重复元素,我们可以先把数组转成Set完成去重,再转成ArrayList。如果需要保留原数组的元素顺序,就用LinkedHashSet;不在乎顺序的话用HashSet(效率略高)。修改后的代码:

package window1;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.Arrays;

public class Mine {
    public static void main(String[] args) {
        String sal[]={"val","sa","de","dal","val","sa","de"};
        
        // 用LinkedHashSet去重同时保留原顺序
        Set<String> uniqueElements = new LinkedHashSet<>(Arrays.asList(sal));
        // 将去重后的Set转换为ArrayList
        ArrayList<String> listName = new ArrayList<>(uniqueElements);
        
        // 用增强for循环遍历,代码更简洁
        for (String item : listName) {
            System.out.println(item);
        }
    }
}

优点:时间复杂度为O(n),效率更高;代码更简洁;注意:如果使用HashSet,输出顺序可能和原数组不一致,需要顺序的话一定要选LinkedHashSet。

两种方案都能满足你的需求,根据实际数据量和顺序要求选择就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:55:39