Зараз я використовую колекції гуави, і мені все добре і щасливо. Але я хочу зрозуміти, чому мій власний код не працював. Думаю, я намагався зробити неможливе:
Я створив 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
контракт про те, що рівність повинна перевірятися як на ключі, так і на вартості.