我目前有这段代码:
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()
实现中使用。