HashMap в Java использует комбинацию методов hashCode() иquals() для эффективного хранения и извлечения значений ключа пары. При добавлении новой пары ключ-значение сначала вычисляется метод ключа hashCode(), чтобы определить хеш-корзину, в которую будет помещена запись. Затем метод «equals()» используется для проверки дубликатов ключей в выбранном сегменте.
В данном тестовом коде класс ToDos определяет примитивную реализацию метода «equals()», гарантируя, что объекты с полем одного и того же дня будут считаться равными. Когда строка // public int hashCode() { return 9; } раскомментирован, все объекты ToDos, независимо от их поля дня, вынуждены возвращать одно и то же значение hashCode(). В результате все объекты ToDos сопоставляются с одним и тем же хэш-ведром, независимо от их поля дня.
Когда метод map.size() вызывается с закомментированной строкой, объекты ToDos с разным днем поля (t1, t2, t3) помещаются в разные хэш-корзины из-за их разных значений hashCode(). Следовательно, Map.size() точно возвращает количество до трех.
И наоборот, когда строка раскомментирована, все объекты ToDos сопоставляются с одним и тем же хэш-ведром, а метод map.size() впоследствии возвращает счет два. Это связано с тем, что HashMap считает все объекты ToDos «логически эквивалентными», поскольку они возвращают одно и то же значение hashCode(). имеет решающее значение для эффективной работы HashMap. Переопределяя только метод hashCode(), важно гарантировать, что логически эквивалентные ключи генерируют согласованные значения hashCode(). Переопределение только методаquals() может привести к проблемам с производительностью из-за увеличения количества сравнений, необходимых для определения логической эквивалентности. Нахождение правильного баланса между эффективным хешированием с помощью hashCode() и обеспечением равенства объектов с помощью методаquals() является ключом к оптимальному использованию HashMap.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3