gpt4 book ai didi

java - 为什么这个 hashmap 有两次相同的键?

转载 作者:行者123 更新时间:2023-11-29 10:18:12 24 4
gpt4 key购买 nike

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

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 :  analyzeSrc.TextInfo@4c5 75.307 603.85535

WTFcontainsKey : analyzeSrc.TextInfo@4c5 71.74238 603.85535

WTFcontainsKey : analyzeSrc.TextInfo@4c4 66.36187 612.82837

...

你能解释一下这里发生了什么吗?

为什么不打印“processTextPosition : containsKey”?

最佳答案

可能是因为您的关键对象没有正确覆盖 equals() 和 hashCode()。

请参阅 Object.hashCode() 的文档和第Object as a Superclass节来自 Java Tutorial

或者更好:阅读 Effective Java (2nd Ed) by Joshua Bloch

关于java - 为什么这个 hashmap 有两次相同的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12365169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com