当前位置: 首页 > 面试题库 >

Java 如何从列表中删除重复项?

葛玉堂
2023-03-14
问题内容

我想从列表中删除重复项,但我无法正常工作:

List<Customer> listCustomer = new ArrayList<Customer>();    
for (Customer customer: tmpListCustomer)
{
  if (!listCustomer.contains(customer)) 
  {
    listCustomer.add(customer);
  }
 }

问题答案:

如果该代码不起作用,则可能是你未equals(Object)Customer该类上正确实现。

大概有一些钥匙(我们称之为customerId)可以唯一地标识一个客户。例如

class Customer {
    private String customerId;
    ...

的适当定义equals(Object)如下所示:

    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (!(obj instanceof Customer)) {
            return false;
        }
        Customer other = (Customer) obj;
        return this.customerId.equals(other.customerId);
    }

为了完整起见,你还应该实现hashCode两个Customer相等的对象将返回相同的哈希值。hashCode上述定义的匹配项为equals:

    public int hashCode() {
        return customerId.hashCode();
    }

还值得注意的是,如果列表很大,这不是删除重复项的有效方法。(对于具有N个客户的列表,N*(N-1)/2在最坏的情况下,即没有重复项时,你将需要进行比较。)对于更有效的解决方案,你应使用诸如a之类的方法HashSet来进行重复项检查。



 类似资料:
  • 其中DataCord是一个类 并且调谐器应该是唯一的

  • 问题内容: 我将如何使用python检查列表并删除所有重复项?我不需要指定重复项是什么- 我希望代码找出是否存在重复项,如果有则将其删除,每个重复项仅保留一个实例。如果列表中有多个重复项,它也必须起作用。 例如,在下面的代码中,列表lseparatedOrbList有12个项目-一项被重复六次,一项被重复五次,并且只有一个实例。我希望它更改列表,因此只有三项-每一项,并且它们之前出现的顺序相同。我

  • 问题内容: 我在Python中有一个列表列表: 我想从中删除重复的元素。如果这是正常列表,而不是我可以使用的列表set。但不幸的是,该列表不可散列,因此无法建立一组列表。只有元组。因此,我可以将所有列表转换为元组,然后使用set并返回列表。但这不是很快。 如何以最有效的方式做到这一点? 上面的结果应为: 我不在乎保留订单。 注意:这个问题很相似,但不是我所需要的。搜索了SO,但没有找到确切的重复项

  • 我要根据列表中项目的属性(邮件)从列表中删除重复项。 我执行了以下操作:

  • 我下面有一个类,想删除包含同名的重复人,如何使用Java8 Lambda,预计列表包含下面的p1、p3。

  • 问题内容: 我想从排序的链表{0 1 2 2 3 3 4 5}中删除重复项。 ` ` prev.setNext(tempHeader)在while循环内无法正常工作。理想情况下,当prev = 2且tempHeader = 3时,prev.next应该是data = 3的节点。 Printlist函数仅使用标题指针并打印列表。 节点定义如下。 问题答案: 循环已排序,因此您知道重复项将彼此相邻。如