当前位置: 首页 > 知识库问答 >
问题:

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

赵驰
2023-03-14
// 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 );
    }   
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”?

共有1个答案

商同化
2023-03-14

可能是因为您的Key对象没有正确重写equals()和hashCode()。

请参阅Java教程中的Object.hashCode()和作为超类的Section对象的文档

或者更好:阅读Joshua Bloch的《有效Java》(第二版)

 类似资料:
  • 我正在检查Asert类的api,并为该类找到了两个。(http://junit.sourceforge.net/junit3.8.1/javadoc/junit/framework/Assert.html和http://junit.sourceforge.net/javadoc/org/junit/Assert.html)这两个没有相同的方法有什么原因吗?第一个有一个assertequals(in

  • 问题内容: 考虑以下两种情况: (转到Playground链接) 第二个打印9.120000000000001,实际上很好 但是,为什么第一行打印9.12,但末尾没有…01?Go是否会将两个未类型化的常数相乘,并在编译时将它们简单地替换为9.12文字? 问题答案: 根据规格: 常量表达式总是精确地求值;中间值和常量本身可能需要比该语言中任何预声明类型支持的精度大得多的精度。 以来 是一个常数表达式

  • 我在android工作室工作,2.1.2。 我在两个活动之间有一个神秘角色转换异常。 在第一个活动中,我有这个ArrayList: 我将arraylist(parcellable)插入到bundle中,以便在另一个活动中发送: 在第二个活动中,我将此用于恢复ArrayList 现在按照 我什么都试过了,带和不带Bundle的发送,类输出结束输出都是一样的,为什么要这样铸造呢?那我该怎么解决?? 谢

  • 我有一个类,只有两个字段:id、name 然后,在类中,我尝试使用两种不同的方法初始化User对象: 然后我就可以得到输出 有趣的是为什么u类是Main的内部类类型?但实际上我仍然可以使用和方法。

  • 和有什么区别? 我对。class文件进行了反编译,发现在第一种情况下,JVM将使用multianwearray来创建数组,而在第二种情况下,它将使用AneWarRay。 我认为在第一种情况下,JVM将创建一个连续的空间。我说的对吗?

  • 错误: Test.ts(18,30):错误TS2345:类型为“{color1:String;}”的参数不能分配给类型为“squareConfig”的参数。对象文本只能指定已知属性,并且“SquareConfig”类型中不存在“Color1”。