我目前有这段代码:

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);
  }
}


我正在阅读的PerformanceCounters的列表是:

1, C-01, New York, 1001
1, C-01, New York, 1002
1, C-01, New York, 1003


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

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

我无法在LinkedList中生成具有3个值的1个键。

我的if( !map.containsKey(s) )部分无法正常工作,我不确定如何解决此问题。

最佳答案

您是Site.java类的作者吗?如果是,请确保正确实现了hashCode()equals()方法。

正常工作的基本合同是:


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

07-24 19:00
查看更多