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

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

【问题讨论】:

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

标签: java arraylist duplicates


【解决方案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 );
    }
}

参考

Set
Java 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

    【讨论】:

      猜你喜欢
      • 2017-08-02
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2014-07-12
      • 2020-12-17
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多