我有两个员工对象
Employee e1 = new Employee("1");
Employee e2 = new Employee("1");
那么如何避免在跟随List
List<Employee> list = new ArrayList<Employee>();
我们可以使用hashcode()
和equals()
方法来避免在列表中插入重复的对象吗?怎么样?
答案 0 :(得分:2)
列表有一种方法来检查对象是否在其中。它在内部使用equals()
方法。
if(!list.contains(e2))
{
list.add(e2);
}
答案 1 :(得分:2)
您可以使用Set来避免插入重复项。但为此,您需要覆盖Employee
类的hashCode()和equals()方法,以定义究竟是e1.equals(e2)
的内容。
答案 2 :(得分:0)
在你的问题中,e1和e2在哈希码方面并不完全相同。因此,您无法使用.equals()
或==
或.hashCode().equals()
将其等同起来。您必须实现自己的方法,以根据这些对象中包含的数据检查是否相等。对于Java,使用new实例化的每个对象都是不同的对象。
以下摘自Java Api doc for hashcode method
hashCode的一般合约是:
- 每当在同一个对象上多次调用它时 执行Java应用程序时,hashCode方法必须 如果没有使用任何信息,则始终返回相同的整数 in equals比较对象被修改。这个整数需要 从一次执行申请到保持不一致 另一个执行相同的应用程序。
- 如果两个物体相等 根据equals(Object)方法,然后调用hashCode 对两个对象中的每一个的方法必须产生相同的整数 结果。
- 如果两个对象不相等,则不需要 到equals(java.lang.Object)方法,然后调用hashCode 对两个对象中的每一个的方法必须产生不同的整数 结果。但是,程序员应该意识到生产 不等对象的不同整数结果可以改善 哈希表的表现。
尽可能合理实用,由hashCode方法定义 class Object确实为不同的对象返回不同的整数。 (这个 通常通过转换内部地址来实现 将对象转换为整数,但这种实现技术不是 JavaTM编程语言所要求的。)