当前位置: 首页 > 知识库问答 >
问题:

从ArrayList中删除重复的自定义对象

端木皓君
2023-03-14

我很难从自定义对象的ArrayList中删除重复项。

删除重复项

public static ArrayList<UnchainedRestaurant> removeDuplicates(ArrayList<UnchainedRestaurant> arraylist) {
        //remove any duplicates
        ArrayList<UnchainedRestaurant> noDuplicates = new ArrayList<>();
        Set<UnchainedRestaurant> setItems = new LinkedHashSet<UnchainedRestaurant>(arraylist);
        noDuplicates.addAll(setItems);
        return noDuplicates;
    } 

自定义对象等于()

public boolean equals(Object o) {
        UnchainedRestaurant r = (UnchainedRestaurant) o;
        String name1 = this.getName();
        String name2 = r.getName();

        name1 = Util.normalizeVenueName(name1);
        name2 = Util.normalizeVenueName(name2);

        if(name1.equals(name2)) {
            return true;
        } else return false;
    }

删除重复项后的输出

1. 786 Kebab & Curry
2. Marlow's Tavern
3. P.F. Chang's
4. Ted's Montana Grill
5. Which Wich? Superior Sandwiches
6. Niko Niko Sushi
7. Burger 21
8. Tin Lizzys Bar and Grille
9. Saigon Flavors
10. Firehouse Subs
11. Luigi's Pizza
12. Roya Mediterranean Restaurant and Tapas Bar
13. East Coast Wings & Grill
14. Provino's Italian Restaurant
15. Kani House
16. Chow Baby
17. Mimi's Cafe
18. Monterrey Mexican Restaurant
19. Panera Bread - Mall of Georgia
20. Umami Asian Cuisine
21. Parma Tavern
7. Burger 21 --------------------------------
23. Luigi's A Slice of Italy
4. Ted's Montana Grill --------------------------------
25. Tom + Chee - Buford
2. Marlow's Tavern --------------------------------
1. 786 Kebab & Curry
28. Sushi Niko Niko
13. East Coast Wings & Grill
3. P.F. Chang's --------------------------------
31. Turkish Kitchen
32. The Cheesecake Factory
17. Mimi's Cafe
34. Aha Sushi
15. Kani House
3. P.F. Chang's --------------------------------
37. Teavana
38. Williams-Sonoma
39. Great Wraps
40. Auntie Anne's Pretzels
1. 786 Kebab & Curry --------------------------------
42. Bruster's Real Ice Cream
43. Spencer Gifts
44. Pretzelmaker
45. Little Tokyo of Georgia Mall
46. Great American Cookies

关于为什么它实际上没有删除重复项,有什么提示吗?或者它实际上是通过将副本替换为原始副本来删除副本?不知道这里发生了什么。

共有1个答案

白泽语
2023-03-14

您还需要重写hashcode方法,因为集合使用它来分配元素,这样如果obj1.equals(OB2)==true那么obj1.hashcode () == obj2.hashcode()也必须为真。

因此,如果你的对手是这样的:

public boolean equals(Object o) {
    UnchainedRestaurant r = (UnchainedRestaurant) o;
    String name1 = this.getName();
    String name2 = r.getName();

    name1 = Util.normalizeVenueName(name1);
    name2 = Util.normalizeVenueName(name2);

    if(name1.equals(name2)) {
        return true;
    } else return false;
}

hashcode看起来像这样:

@Override
public int hashcode() {
     return Util.normalizeVenueName(this.getName()).hashcode();
}
 类似资料:
  • 问题内容: 我有一个自定义类,定义如下: 现在我有一个数组。该字段对于每个对象都是唯一的。我需要检查数组并从中删除所有重复项,从本质上确保数组中的所有对象都具有唯一的。我已经看到了一些使用的解决方案,但是我不确定如何在这里调整它们。我也知道,但这似乎不适用于自定义对象数组。 问题答案: 您可以使用一组字符串来完成此操作,如下所示: 想法是保留一组到目前为止我们已经看到的所有ID,循环遍历所有项目,

  • 问题内容: 我有一个字符串数组列表,并在其中添加了一些重复值。我只想删除那个重复的值,那么如何删除它。 在这个例子中我有一个主意。 但是有没有足够的方法来删除该重复表格列表。没有使用For循环?我可以通过使用HashSet或其他方式来做到这一点,但只能使用数组列表。想对此提出您的建议。谢谢您的提前答复。 问题答案: 您可以从列表中创建一个。在将包含每个元素只有一次,在相同的顺序。然后从创建一个新的

  • 我有一个arraylist,它包含一对整数(例如int i,int j)。但它可能包含重复对(如(int i,int j)和(int j,int i))。现在如何在O(n)时间复杂度中去除重复。

  • 这段代码运行良好,但我想知道它的性能,我指的是它的总体时间复杂度?

  • 问题内容: 这个问题已经在这里有了答案 : 是什么导致java.lang.ArrayIndexOutOfBoundsException,如何防止它发生? (25个答案) 4年前关闭。 所以我有另一个带有main方法的类,在该类中我调用createNumbers(),createColours(),createBalls()。当我运行程序时,我在numere.remove(nr)处得到一个Index

  • 问题内容: 如果满足条件,我需要从中删除一些对象,我想知道哪种方法会更有效。 情况如下:我有一个包含包含其他一些对象的类。我必须对此进行迭代,并删除满足特定条件的所有元素。据我所知,这些是我要删除的选项: 创建一个新的并添加不符合条件的元素。迭代之后,从旧的数组列表交换到没有元素的新数组列表。 创建一个新的并添加满足条件的元素。迭代后,使用传递要删除对象的方法。 有没有更有效的方法从中删除对象?