// same X, Y value text.
TextInfo currXY = new TextInfo(text);
ArrayList<TextPosition> currTextArray = textComposition.get(currXY);
if(currTextArray != null){
currTextArray.add(text);
} else {
ArrayList<TextPosition> newTextArray = new ArrayList<TextPosition>();
newTextArray.add(text);
if(textComposition.containsKey(currXY)){
System.out.println("processTextPosition : containsKEy ");
}
textComposition.put(currXY , newTextArray);
}
A HashMap
不能有重复或相同的密钥对吗?为什么这个hashmap有两次相同的密钥?
我从hashmap中获取所有条目,并将这些条目放入一个新的hashmap中。
它继续像相同的密钥。
lineSortingMap = new HashMap< TextInfo, ArrayList<TextPosition> >();
for (Map.Entry< TextInfo, ArrayList<TextPosition> > entry : textComposition.entrySet()) {
TextInfo key = (TextInfo)entry.getKey();
ArrayList<TextPosition> arrayTextPositions = entry.getValue();
if(lineSortingMap.containsKey(key)){
System.out.println("WTFcontainsKey : " + " " + key + " " + key.getX() + " " + key.getY());
}
else{
lineSortingMap.put(key , arrayTextPositions);
}
}
结果:
WTFcontainsKey : [email protected] 75.307 603.85535
WTFcontainsKey : [email protected] 71.74238 603.85535
WTFcontainsKey : [email protected] 66.36187 612.82837
...
你能解释这里发生了什么?
为什么不打印“processTextPosition:containsKey”?
@JoachimSauer令人惊讶的是Sun/Oracle官方文档中强调了这一点。 Java教程的Maps部分和HashMap JavaDocs几乎没有提到一致的equals()/ hashCode()实现的重要性。 –
我的印象是很多API文档都是从受正式系统影响的视图写成的(“你是什么意思?”equals()'/'hashCode()你不遵循他们的系统是FUBAR,是不是很明显?“),而不是真实世界的文档(”注意,如在这个和这个位置记录,你**必须确保.. .. “)。 –
谢谢你的回答:)我重写equals()和hashCode()。但我不明白,当第一次调用containsKey方法,它返回false ...接下来,我移动该hashmap的条目,但这次containsKey方法返回true – hanbumpark