我有一个对象数组需要删除/过滤重复项.我只是在Object元素上覆盖equals&hachCode,然后将它们粘贴在Set中......但我认为我至少应该轮询stackoverflow以查看是否有其他方法,或许某些其他API的聪明方法?
我同意你的覆盖方法hashCode()
,equals()
并使用实现的东西Set
.
这样做也使任何其他开发人员都清楚地知道需要非重复的特性.
另一个原因 - 您现在可以选择最符合您需求的实施方案:
HashSet的
TreeSet中
LinkedHashSet
并且您不必更改代码以在将来更改实现.
我在网上发现了这个
以下两种方法允许您删除ArrayList中的重复项.removeDuplicate不维护removeDuplicateWithOrder维护订单的顺序,其中包含一些性能开销.
removeDuplicate方法:
/** List order not maintained **/ public static void removeDuplicate(ArrayList arlList) { HashSet h = new HashSet(arlList); arlList.clear(); arlList.addAll(h); }
removeDuplicateWithOrder方法:
/** List order maintained **/ public static void removeDuplicateWithOrder(ArrayList arlList) { Set set = new HashSet(); List newList = new ArrayList(); for (Iterator iter = arlList.iterator(); iter.hasNext();) { Object element = iter.next(); if (set.add(element)) newList.add(element); } arlList.clear(); arlList.addAll(newList); }