Ignite 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 говорит

Определяет, содержит ли кэш запись для указанного ключа.

Более формально, возвращает true тогда и только тогда, когда этот кэш содержит отображение для ключа k такого, что key.equals(k). (Таких отображений может быть не больше одного.)

Так почему же cache.containsKey возвращает false?

Спасибо


person Akin    schedule 01.07.2016    source источник


Ответы (1)


Код, который вы предоставили, выглядит неправильно. Вы не должны использовать хэш-карту в качестве ключа кэша.

Попробуй это:

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

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

    System.out.println("cache.get(ID)=" + cache.get("ID"));
}
person Dmitriy    schedule 01.07.2016