我有一个非常冗长的ArrayList,其中包含一些对象,但无疑是重复的。找到并删除这些重复项的最佳方法是什么。注意:我编写了一个布尔返回的compareObjects()方法。
答案 0 :(得分:32)
List<Item> result = new ArrayList<Item>();
Set<String> titles = new HashSet<String>();
for( Item item : originalList ) {
if( titles.add( item.getTitle() ) {
result.add( item );
}
}
答案 1 :(得分:8)
您提到编写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。
答案 2 :(得分:3)
Hashset
将删除重复项。例如:
Set< String > uniqueItems = new HashSet< String >();
uniqueItems.add("a");
uniqueItems.add("a");
uniqueItems.add("b");
uniqueItems.add("c");
集合“uniqueItems”将包含以下内容:a,b,c