android java --key相同,但是containsKey返回false

时间:2019-03-15 05:01:48

标签: java android containskey

我必须将值放在LinkedHashMap中。 (因为我想排序和确定是否已经有值)

我认为,如果String值与 temp temp2 相同,containsKey将返回true。 但是, testMap.put(temp2,8); 正在运行。

我不知道为什么。 如果那不是正确的答案,我该如何快速存储或访问值?

 public class TestClass{
        public String one;
        public String two;
        TestClass(String one, String two){
            this.one=one;
            this.two=two;
        }
    }
    public void testPersonWord(){
        LinkedHashMap<TestClass, Integer> testMap= new LinkedHashMap<>();
        TestClass temp= new TestClass("hdy","hello");
        testMap.put(temp,3);
        TestClass temp2= new TestClass("hdy","hello");
        if(testMap.containsKey(temp2)){
            testMap.replace(temp2,5);
        }else{
            testMap.put(temp2,8);
        }
    }

1 个答案:

答案 0 :(得分:0)

这是containKey方法。 hashCode用于比较,因此两个对象的hashCode肯定是不同的,因此不能相等。
您可以考虑使用原始键或使用TestClass.getOne()比较String。

/**
 * Returns <tt>true</tt> if this map contains a mapping for the
 * specified key.
 *
 * @param   key   The key whose presence in this map is to be tested
 * @return <tt>true</tt> if this map contains a mapping for the specified
 * key.
 */
public boolean containsKey(Object key) {
    return getNode(hash(key), key) != null;
}

希望这会有所帮助!