私は以下のプログラムを書いており、出力を理解することはできません。等価とハッシュコードのオーバーライド
package com.demo.strings;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
class Emp
{
private int empNo;
private String empName;
public Emp(int empno, String empname)
{
this.empNo=empno;
this.empName=empname;
}
public int getEmpNo() {
return empNo;
}
public void setEmpNo(int empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public boolean equals(Object obj)
{
if(obj != null && obj instanceof Emp)
{
String name = ((Emp)obj).getEmpName();
if(name.equals(this.getEmpName()))
{
return true;
}
}
return false;
}
public int hashcode()
{
return (this.hashCode()+1);
}
}
public class StringDemo {
public static void main(String[] args) {
Emp e1 = new Emp(1,"Stack");
Emp e2 = new Emp(1,"Stack");
Map<Integer,Emp> empMap = new HashMap<Integer,Emp>();
empMap.put(1,e1);
empMap.put(2,e2);
System.out.println(empMap.size());
System.out.println("Both objects are equal: "+e1.equals(e2));
}
}
出力:2 両方のオブジェクトが等しい:真
私はequals
とhashcode
をオーバーライドしてきたので、Map
はそれで1つのオブジェクトのみを保存することになっています。しかし、それは両方を格納しているようです。 equals
とhashcode
が上書きされた方法が間違っていますか?誰も私にこの問題を解決する方法を教えてもらえますか?あなたがHashMapを使用しているhere
から
[JavaでequalsメソッドとhashCodeメソッドをオーバーライドする必要があるのはなぜですか?](https://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals- and-hashcode-methods-in-java) –
y 'hashcode()'は 'StackOverflowError'をスローしませんか?それは無限に繰り返されます。 –