Как бы я увидел, если две очереди Java равны на основе значения содержимого каждой? - PullRequest
3 голосов
/ 17 ноября 2010

Я хочу реализовать переопределение equals, которое сравнивает два объекта Java Queue на основе их содержания, равного (по значению).

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

Я ценю любые предложения. Мне нужно сделать то же самое с коллекциями ArrayList и HashMap.

Кстати, для equals (), я использую это в качестве руководства: http://www.javapractices.com/topic/TopicAction.do?Id=17

Это дает некоторые подсказки, но, очевидно, мне нужна дополнительная помощь, когда дело доходит до коллекций. Типы, содержащиеся в коллекциях, переопределяют equals (), основываясь на рекомендациях из этой ссылки.

1 Ответ

7 голосов
/ 17 ноября 2010

JavaDoc из java.util.Queue уже заявляет о проблеме:

Реализации очереди, как правило, не определяют основанные на элементах версии методов equals и hashCode, а вместо этого наследуют идентифицированные версии от класса Objectпотому что равенство на основе элементов не всегда четко определено для очередей с одинаковыми элементами, но с разными свойствами упорядочения.

Итак, вам нужно реализовать логику самостоятельно (или повторно использовать некоторую библиотеку) для ваших сценариев использования, если вы хотите сделать это на основе содержащихся объектов.

Например, для ArrayList вы бы просто вызвали ArrayList.equals().

Для очередей я бы пошел на прагматичный подход к преобразованию их в массив с использованием, например, java.util.concurrent.LinkedBlockingQueue.toArray(), а затем использовал бы Arrays.equals(queue1AsArray,queue2AsArray);

...