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
【讨论】:
AHashSet
防止重复。
@JoshM All 集应防止重复。 the javadoc 的第一行是“一个不包含重复元素的集合。”
LinkedHashSet 在这种情况下应该用于项目订单
@JoshuaTaylor 我认为TreeSet
仍然允许重复。哦,我的错,你是对的。
@JoshM 普通Set
之间的区别,例如HashSet
和 LinkedHashSet
和 SortedSet
例如TreeSet
是 Set
使用 equals
和 hashCode
方法来比较对象的相等性,而 SortedSet
使用 compareTo
或 Comparator
作为其元素。请参阅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中的重复对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章