hashCode 如何与 Java 中的 HashMap 一起使用

use*_*969 2 java

我目前有这段代码:

Map<Site, LinkedList<Site.Hosts.Host>> map = new HashMap<Site, LinkedList<Site.Hosts.Host>>();

for (PerformanceCounter element : pc) {
  Site s = new Site();

  s.id = Short.parseShort(element.getSite_id());
  s.name = element.getSite_name();
  s.location = element.getSite_location();

  Site.Hosts.Host h = new Site.Hosts.Host();
  h.id = Short.parseShort(element.getHost_id());

  if (!map.containsKey(s)) {
    map.put(s, new LinkedList<Site.Hosts.Host>());
  } else {
    map.get(s).add(h);
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在阅读的 PerformanceCounters 列表是:

1, C-01, New York, 1001
1, C-01, New York, 1002
1, C-01, New York, 1003
Run Code Online (Sandbox Code Playgroud)

其中 101 是 ID,C-01 是名称,纽约是位置。

不幸的是,我的代码为我的地图创建了 3 个键值。

我无法生成 1 个键和 3 个值LinkedList

我的if( !map.containsKey(s) )部分无法正常工作,我不知道如何解决这个问题。

vkg*_*vkg 6

Site.java你是班级的作者吗?如果是,请确保您有正确的实施hashCode()equals()方法。

使其正常工作的基本合同是:

  1. 如果两个对象根据方法相等,equals()那么它们必须具有相同的hashCode().
  2. 但如果两个对象返回相同的值hashCode()并不意味着它们相等。
  3. 此外,如果您在evaluating hasCode()方法中使用任何对象属性,它们也必须在实现中使用 equals()