我想根据对象的属性将唯一的对象添加到列表中。
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 中选择一个容器时,我都会看这个:
要让所有这些可供您使用,您不仅需要实现 hashcode and equals但是comparator以及。
需要明确的是,哈希的目的是提供查找速度。 equals 的要点是定义哪些对象被认为是相同的。比较器的目的是为对象提供排序。
如果您想包含不常用的容器,请尝试以下操作:
关于java - java中的列表中的唯一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29294996/