在Java中删除数组中重复项的最佳方法是什么?

2022-09-03 09:24:10

我有一个对象数组,需要删除/过滤重复项。我打算在对象元素上覆盖equals和hachCode,然后将它们粘贴到一个Set中......但我认为我至少应该轮询堆栈溢出,看看是否有另一种方法,也许是其他API的一些聪明方法?


答案 1

我同意您覆盖和使用实现.hashCode()equals()Set

这样做还可以使任何其他开发人员绝对清楚需要非重复特征。

另一个原因 - 您现在可以选择最能满足您需求的实现:

并且您不必更改代码即可在将来更改实现。


答案 2

我在网上找到了这个

下面是两种方法,可用于删除 ArrayList 中的重复项。removeDuplicate 不保持作为 removeDuplicateWithOrder 保持顺序,但会产生一些性能开销。

  1. 删除重复方法:

    /** List order not maintained **/
    public static void removeDuplicate(ArrayList arlList)
    {
     HashSet h = new HashSet(arlList);
     arlList.clear();
     arlList.addAll(h);
    }
    
  2. 删除重复使用顺序方法:

    /** 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);
    }
    

推荐