これは、hasmap に入れるために使用するクラスです。equals()
とhashcode()
メソッドの両方をオーバーライドしています。
class Dog
{
public String name;
public Dog(String n)
{
name=n;
}
@Override
public int hashCode() {
System.out.println("in hashcode");
return name.length();
}
@Override
public boolean equals(Object obj) {
System.out.println("in equals");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Dog other = (Dog) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
メインのこのコード
Map<Object,Object> m=new HashMap<Object,Object>();
Dog d1=new Dog("clover");
m.put(d1,"Dog Key");
System.out.println(m.get(d1));
生産する
in hashcode
in hashcode
Dog Key
しかし、次のコード
Map<Object,Object> m=new HashMap<Object,Object>();
Dog d1=new Dog("clover");
m.put(d1,"Dog Key");
System.out.println(m.get(new Dog("clover")));
生産する
in hashcode
in hashcode
in equals
Dog Key
ご覧のとおりequals()
、2 番目の出力にメソッドの呼び出しがあります。どうしてこんなことに?
2 番目の質問
キー Map m=new HashMap(); の name 属性を変更すると、
Dog d1=new Dog("clover");
m.put(d1,"Dog Key");
d1.name="arthur";
System.out.println(m.get(new Dog("clover")));
o/p は
in hashcode
in hashcode
in equals
null
キーの値を変更しましたが、同じキーを指定して値を取得しようとしています。では、なぜ null を取得するのでしょうか。