从数组列表中删除重复的元素

时间:2013-12-05 09:20:14

标签: java arraylist

在我的程序中,我有一个包含产品对象的数组列表。我想从中删除重复的产品对象。除了循环每个元素并进行比较之外,还有其他有效方法。

7 个答案:

答案 0 :(得分:10)

只需将所有元素添加到set即可。它不会允许重复值

   List<Product> list=new ArrayList<>();
   Set<Product> set=new HashSet<>();
   set.addAll(list);

答案 1 :(得分:5)

您可以将元素放入Set。设置仅保留唯一值。

   List<String> list=new ArrayList<>();
   Set<String> set=new HashSet<>();
   set.addAll(list); // now you have unique value set

如果您希望最终结果为唯一值List,则需要将此Set作为List

   List<String> uniqueValList=new ArrayList<>(set);

答案 2 :(得分:5)

只需将您的列表集合传递给Hashset构造函数并将其取回。

然后那个班轮将是,

list = new ArrayList<E>(new HashSet<E>(list));

答案 3 :(得分:2)

您可以使用Set但是您将失去列表的原始顺序。

您可以采取以下措施来保持订单:

Set<E> copied = new HashSet<>();
List<E> res = new ArrayList<>();
for(E e : originalList) {
    if(!copied.contains(e)) {
        res.add(e);
    }
    copied.add(e);
}

答案 4 :(得分:1)

使用Set代替列表,它会删除重复项

答案 5 :(得分:1)

尝试使用Set代替List。设置不允许重复值。

答案 6 :(得分:0)

上面使用Set的建议很好 - 但如果你需要保留订单,只需使用LinkedHashSet http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html

List<String> list = ...
Set<String> set = new LinkedHashSet<>(list);
list.clear();
list.addAll(set);

这将保留顺序并删除所有重复项。

虽然在字符串的情况下,结果将区分大小写。