В чем разница между методами element () и getFirst () в классе LinkedList? - PullRequest
7 голосов
/ 06 февраля 2011

LinkedList имеет аналогичные описания для метода element() и метода getFirst() (как ни странно - не те же слова).

Deque четко указывает, что оба метода одинаковы с точки зрения возвращаемого значения и исключения.

Мой вопрос - почему есть 2 одинаковых метода? Это для обратной совместимости? Является ли один подход более эффективным, чем другой?

Ответы [ 3 ]

5 голосов
/ 06 февраля 2011

element() наследуется от Queue, где имеет смысл иметь только один метод доступа, поскольку все, что вы можете сделать в очереди, это удалить первый элемент. Однако deque поддерживает это с обоих концов, что требует явных методов для этого.

И не очень хорошо спроектировать API, где бы вы обращались к первому элементу с element(), а последний с getLast().

Другая вещь, которая может сыграть в это, заключается в том, что Deque был добавлен в 1.6, где части древних частей Java Collections Framework были устаревшими из-за более новых соглашений, таких как явные методы get~ / set~ для доступ к собственности. В этом контексте getFirst() и getLast более точно соответствуют действующим соглашениям Java.

3 голосов
/ 06 февраля 2011

В Java 1.6 LinkedList реализует Deque (двусторонняя очередь).Из Deque.element() javadocs:

Извлекает, но не удаляет, заголовок очереди, представленной этим deque (другими словами, первый элемент этого deque),Этот метод отличается от peek только тем, что выдает исключение, если эта пустая очередь.

Этот метод эквивалентен getFirst().

В Java1.5, LinkedList имеет оба метода, но getFirst() не поддерживается интерфейсом.Я предполагаю, что в Java 1.6 они намеренно реализовали Deque для включения этого метода.

В Java 1.4 LinkedList имеет только getFirst(),но он не поддерживается интерфейсом.

Очевидно, я бы сказал, что это проблема обеспечения обратной совместимости:

  • LinkedList 1.4 имеет getFirst () и толькоList интерфейс
  • LinkedList 1.5 реализует Queue и, следовательно, должен поддерживать эквивалентный elements() метод
  • LinkedList 1.6 реализует Deque, нопотому что а) он должен оставаться обратно совместимым и б) политикой, все методы должны поддерживаться интерфейсами, интерфейс Deque также включает дублирующий метод
0 голосов
/ 06 февраля 2011

В указанной ссылке все выглядит так же. Но в очереди element() представляется способом для пика первого элемента в очереди, но не удаления его из очереди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...