尽管键相等,则点燃cache.containsKey返回false [英] Ignite cache.containsKey returns false although keys are equal

查看:79
本文介绍了尽管键相等,则点燃cache.containsKey返回false的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我运行以下代码:

@Test
public void containsTest() {
    IgniteCache<Object, Object> cache = ignite.getOrCreateCache("cache");

    Map<String, Integer> key1 = new HashMap<>();
    key1.put("ID", 1);
    Map<String, Integer> key2 = new LinkedHashMap<>();
    key2.put("ID", 1);

    System.out.println("key1.equals(key2)=" + key1.equals(key2));

    cache.put(key1, "key 1 value");

    System.out.println("cache.containsKey(key1)=" + cache.containsKey(key1));
    System.out.println("cache.containsKey(key2)=" + cache.containsKey(key2));
}

我得到以下输出:

key1.equals(key2)=true
cache.containsKey(key1)=true
cache.containsKey(key2)=false

JSR107规范说

确定缓存是否包含指定键的条目.

Determines if the Cache contains an entry for the specified key.

更正式地说,当且仅当此缓存包含键k的映射(例如key.equals(k))时,才返回true.(最多可以有一个这样的映射.)

More formally, returns true if and only if this cache contains a mapping for a key k such that key.equals(k). (There can be at most one such mapping.)

那为什么cache.containsKey返回false?

So why does the cache.containsKey return false?

谢谢

推荐答案

您提供的代码看起来有误.您不应该将哈希图用作缓存键.

The code you provided looks wrong. You should not use a hashmap as a cache key.

尝试一下:

@Test
public void test() {
    IgniteCache<Object, Object> cache = ignite.getOrCreateCache("cache");

    cache.put("ID", "1");

    System.out.println("cache.get(ID)=" + cache.get("ID"));
}

这篇关于尽管键相等,则点燃cache.containsKey返回false的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆