在我的程序中,我有一个包含产品对象的数组列表。我想从中删除重复的产品对象。除了循环每个元素并进行比较之外,还有其他有效方法。
答案 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);
这将保留顺序并删除所有重复项。
虽然在字符串的情况下,结果将区分大小写。