// 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