如何避免将数组中的重复元素添加到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
相关产品推荐
相关产品推荐

