java - java中的列表中的唯一对象

标签 java

我想根据对象的属性将唯一的对象添加到列表中。

class Employee {
    protected long   employeeId;
    protected String firstName;
    protected String lastName;

    Employee(long employeeId,String firstName,String lastName){
        this.employeeId = employeeId;
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

我想根据唯一的 'employeeId''firstName' 将对象插入列表,在将对象插入列表时,组合应该是唯一的。

最佳答案

如果您希望某些容器能够防止添加重复的 Employee,您需要定义如何在 Employee 中计算 equals。

public class Employee {
//...
    @Override
    public boolean equals(Object obj) {
       if (!(obj instanceof Person))
            return false;
        if (obj == this)
            return true;

        Person rhs = (Person) obj;
        return new EqualsBuilder()
            // if deriving: .appendSuper(super.equals(obj))
            .append(employeeId, rhs.employeeId)
            .append(firstName, rhs.firstName)
            .append(lastName, rhs.lastName)
            .isEquals();
    }
}

如果您希望某些容器能够快速查找您的员工,您需要定义如何在员工中计算哈希码。

public class Employee {
//...
    @Override
    public int hashCode() {
        int hash = 1;
        hash = hash * 17 + employeeId;
        hash = hash * 31 + firstName.hashCode();
        hash = hash * 13 + lastName.hashCode();
        return hash;
    }
}

大多数现代 IDE 都会提供重构来为您执行此操作。在两者中使用相同的字段,以便它们一起更改。

由于您不想要重复项,所以最好不要使用 ArrayList,而是使用关注散列并为您强制执行唯一性的东西。每当我在 java 中选择一个容器时,我都会看这个:

enter image description here

要让所有这些可供您使用,您不仅需要实现 hashcode and equals但是comparator以及。

需要明确的是,哈希的目的是提供查找速度。 equals 的要点是定义哪些对象被认为是相同的。比较器的目的是为对象提供排序。

如果您想包含不常用的容器,请尝试以下操作:

enter image description here

关于java - java中的列表中的唯一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29294996/

相关文章:

java - 总是出现错误 “Non HTTP response code: java.net.UnknownHostException”

java - 如何配置和检索 g :select in Grails? 的值

java - 使用 hibernate 获取两个时间戳差异的平均值

java - Canvas 在特定设备上不可见(One X)

java - 将 xml 发布到 spring REST 端点不会被解码到相关的 Java 对象中

java - 带有 IAM 的 AWS MSK - 超时异常

java - log4j 与 Mac OS Leopard 兼容吗

java - Tomcat 7 中的 JNDI 数据源配置

Java 递归博弈论取得最佳进展

java - 将光标移动到 while 循环 ResultSet 后的第一行