Как Ignite выполняет операцию cache.get () при переопределении hashCode? - PullRequest
0 голосов
/ 06 июня 2018

См. Изображение ниже.

Image.png

Я поместил ключи в кеш, используя метод equals следующим образом:

@Override
public boolean equals(Object obj) {
    HierarchyMasterKey hierarchyMasterKey = (HierarchyMasterKey) obj;   

    return  equalTo(this.hmCustNo, hierarchyMasterKey.hmCustNo) &&
            equalTo(this.hmFromDate, hierarchyMasterKey.hmFromDate) &&
            equalTo(this.hmParentCustNo, hierarchyMasterKey.hmParentCustNo) &&
            equalTo(this.hmActNo, hierarchyMasterKey.hmActNo);

 } 

(метод equalTo - это в основном проверка на равенство нулевой безопасности.)

и hashCode вычисляется следующим образом:

    @Override 
    public int hashCode() { 
            return Objects.hash(hmCustNo,hmActNo); 
    } 

Когда я пытаюсь получить из него, метод equals не будетбыть казненным.Почему это так?Как воспламенить получить ключ без выполнения равных?

[У меня есть кеш с HierarchyMasterKey и списком HierarchyMaster в качестве значений и использующим Externalizable для переопределения хэш-кода и равно]

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Нашел проблему здесь.На самом деле это интересное наблюдение.

Мой кеш отключен.Ignite выполнит BPlusTree-поиск элементов вне кучи, где для поиска результата ему не нужен метод equals.

Если этот параметр включен, он будет работать так же, как операция get из hashmap.

0 голосов
/ 06 июня 2018

Ignite будет сравнивать ключи по полям (включая порядок полей) по умолчанию, в двоичной сериализованной форме.

hashCode будет использоваться только тогда, когда ваш класс реализует Externalizable.Это влияет на производительность.

Вы также можете реализовать Binarylizable и реализовать соответствующие методы, чтобы повлиять на то, как объекты хранятся и сравниваются.

...