为什么我不能用我的对象的副本从这张地图中获取()?
Why can I not get() from this map with a copy of my object?
我有一个 id 类型为 UUID 的对象。如果此 UUID 匹配,则它等于另一个对象。我可以确认我已正确实施 equals()
和 compareTo()
,并且每个都为 Comparable
接口提供了 @Override
。
为什么当我使用 id 的副本查询我的对象时,我得到的是 null?
public class SomeId implements Comparable<SomeId> {
UUID id;
SomeId(
UUID id)
{
this.id = id;
}
UUID getUniqueId() {
return id;
}
@Override
public String toString() {
return id.toString();
}
@Override
public boolean equals(
Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SomeId o = (SomeId)obj;
boolean b = id.equals(o.getUniqueId());
return b;
}
@Override
public int compareTo(
SomeId val)
{
return id.compareTo(val.getUniqueId());
}
}
主要:
Map<SomeId, Integer> map = new HashMap<>();
SomeId id1 = new SomeId(UUID.randomUUID());
SomeId id2 = new SomeId(UUID.fromString(id1.toString()));
if (id1.equals(id2))
System.out.println("Equal!");
if (id1.compareTo(id2) == 0)
System.out.println("Equal!");
System.out.println(id1);
System.out.println(id2);
map.put(id1, new Integer(1));
System.out.println(map.get(id1));
// Always retrns null?
System.out.println(map.get(id2));
当运行这个程序时我得到以下输出:
Equal!
Equal!
f9b9b419-659e-4da7-9043-e7e51bef7bad
f9b9b419-659e-4da7-9043-e7e51bef7bad
1
null
请实现 hashCode ;-)
public int hashCode() {
final int PRIME = 59;
int result = 1;
final Object $id = this.id;
result = result * PRIME + ($id == null ? 43 : $id.hashCode());
return result;
}
我有一个 id 类型为 UUID 的对象。如果此 UUID 匹配,则它等于另一个对象。我可以确认我已正确实施 equals()
和 compareTo()
,并且每个都为 Comparable
接口提供了 @Override
。
为什么当我使用 id 的副本查询我的对象时,我得到的是 null?
public class SomeId implements Comparable<SomeId> {
UUID id;
SomeId(
UUID id)
{
this.id = id;
}
UUID getUniqueId() {
return id;
}
@Override
public String toString() {
return id.toString();
}
@Override
public boolean equals(
Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SomeId o = (SomeId)obj;
boolean b = id.equals(o.getUniqueId());
return b;
}
@Override
public int compareTo(
SomeId val)
{
return id.compareTo(val.getUniqueId());
}
}
主要:
Map<SomeId, Integer> map = new HashMap<>();
SomeId id1 = new SomeId(UUID.randomUUID());
SomeId id2 = new SomeId(UUID.fromString(id1.toString()));
if (id1.equals(id2))
System.out.println("Equal!");
if (id1.compareTo(id2) == 0)
System.out.println("Equal!");
System.out.println(id1);
System.out.println(id2);
map.put(id1, new Integer(1));
System.out.println(map.get(id1));
// Always retrns null?
System.out.println(map.get(id2));
当运行这个程序时我得到以下输出:
Equal!
Equal!
f9b9b419-659e-4da7-9043-e7e51bef7bad
f9b9b419-659e-4da7-9043-e7e51bef7bad
1
null
请实现 hashCode ;-)
public int hashCode() {
final int PRIME = 59;
int result = 1;
final Object $id = this.id;
result = result * PRIME + ($id == null ? 43 : $id.hashCode());
return result;
}