Java删除ArrayList中的重复对象[重复]

Posted

技术标签:

【中文标题】Java删除ArrayList中的重复对象[重复]【英文标题】:Java remove duplicate objects in ArrayList [duplicate] 【发布时间】:2013-12-24 09:10:37 【问题描述】:

我有一个非常长的 ArrayList 由对象组成,但是其中一些对象无疑是重复的。查找和删除这些重复项的最佳方法是什么。注意:我写了一个返回布尔值的 compareObjects() 方法。

【问题讨论】:

将你的arrayList的所有对象添加到一个Set中(LinkedHashSet将保持原始列表的顺序,否则HashSet会很好,只要确保你为你的类覆盖equals和hashcode)。看到这个:***.com/questions/203984/… 任何特定的类型?我假设 Set 可以防止重复?我是初学者。 参考java.util.Set 【参考方案1】:

示例

List<Item> result = new ArrayList<Item>();
Set<String> titles = new HashSet<String>();

for( Item item : originalList ) 
    if( titles.add( item.getTitle() )) 
        result.add( item );
    

参考

SetJava Data Structures

【讨论】:

A HashSet 防止重复。 @JoshM All 集应防止重复。 the javadoc 的第一行是“一个不包含重复元素的集合。” LinkedHashSet 在这种情况下应该用于项目订单 @JoshuaTaylor 我认为TreeSet 仍然允许重复。哦,我的错,你是对的。 @JoshM 普通Set 之间的区别,例如HashSetLinkedHashSetSortedSet 例如TreeSetSet 使用 equalshashCode 方法来比较对象的相等性,而 SortedSet 使用 compareToComparator 作为其元素。请参阅here 了解更多信息。【参考方案2】:

你提到写一个compareObjects 方法。实际上,当两个对象相等时,您应该重写equals 方法以返回true

话虽如此,我只返回一个包含原始元素的新列表:

ArrayList<T> original = ...
List<T> uniques = new ArrayList<T>();
for (T element : original) 
  if (!uniques.contains(element)) 
    uniques.add(element);
  

这仅在您覆盖 equals 时有效。请参阅this question 了解更多信息。

【讨论】:

【参考方案3】:

Hashset 将删除重复项。示例:

Set< String > uniqueItems = new HashSet< String >();
uniqueItems.add("a");
uniqueItems.add("a");
uniqueItems.add("b");
uniqueItems.add("c");

集合"uniqueItems" 将包含以下内容:a、b、c

【讨论】:

以上是关于Java删除ArrayList中的重复对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中如何从ArrayList中删除重复对象

如何从java arraylist中删除重复的对象[重复]

Java - 删除 ArrayList 中的重复项

Java中ArrayList问题:删除一个ArrayList中的重复元素,注意留意一个问题

java List去除重复数据的五种方式

C#ArrayList重复数据删除