/ / Будь-який пункт перевизначення “дорівнює ()” в “AbstractMap.SimpleEntry <>”? “Дорівнює ()” має бути остаточним? - java, колекції, перевизначення методу

Будь-який пункт переоцінки "equals ()" в "AbstractMap.SimpleEntry <>"? "Equals ()" має бути остаточним? - java, collections, method-overriding

Зараз я використовую колекції гуави, і мені все добре і щасливо. Але я хочу зрозуміти, чому мій власний код не працював. Думаю, я намагався зробити неможливе:

Я створив a SortedSet<Map.Entry<K, V>> структура даних.Помилка полягала в тому, що я іноді отримував дублікати в наборі. Для мене "дублікат" Map.Entry - це той, де його ключ відповідає ключу іншого запису. Я хотів ігнорувати значення щодо обчислення рівності.

Але ось API:
AbstractMap.SimpleEntry: загальнодоступне логічне значення дорівнює (Об'єкт o)

Я був схожий на "Ні. Я цього не хочу". Я намагався пристосувати SimpleEntry до моєї волі, розширивши його і перевизначивши equals (), щоб використовувати лише ключі для вирішення рівності.

питання
Створення AbstractMap.SimpleEntry використовує лише ключ для вирішення рівності якийсь ефект пульсації, який було б майже неможливо зрозуміти повністю?

Чи є абсолютно будь-яка можлива причина, щоб замінити equals () в AbstractMap.SimpleEntry? Javadoc є настільки обмежувальним, що вирішує рівність, не слід просто робити "t дорівнює ()" фінал ?

Відповіді:

2 для відповіді № 1

Його мислимый що ви можете реалізувати equals якимось більш оптимізованим способом, наприклад, якщо ви заздалегідь призначили хеш-код для ключа. В іншому випадку, так, це слід вважати остаточним. Це частина Map.Entry контракт про те, що рівність повинна перевірятися як на ключі, так і на вартості.