Нужно предложение создания экземпляра коллекции - PullRequest
1 голос
/ 14 марта 2019

Итак, я обнаружил, что Collection как Interface имеет много подинтерфейсов и подклассов. Одна вещь, которая обычно замечается, состоит в том, чтобы использовать интерфейс вместо фактического класса, который обеспечивает гибкость:

List<Interger> L1 = new ArrayList<>();

Но это также ограничивает использование некоторых специальных методов в реальных Class, (в случае ArrayList не так много специальных методов). Но это можно решить, используя кастинг.

List<Integer> L2 = ((ArrayList<Integer>) L1).clone();

Однако интересно, что LinkedList реализует Collection, List, Queue, Deque.

Так, каков наилучший сценарий использования LinkedList общего?

List<> L1 = new LinkedList<>();
Queue<> Q1 = new LinkedList<>();
Deque<> D1 = new LinkedList<>();
  1. Если я использую List, тогда это кажется ненужным, потому что я могу сделать List от ArrayList.
  2. Должен ли я всегда выбирать Interface, который всего на 1 уровень выше Class, в данном случае Deque над Queue?

Я думаю, это просто сбивает с толку, потому что Queue и Deque не реализуют List, а LinkedList. И я не понимаю, почему это должно быть?

Спасибо,

1 Ответ

1 голос
/ 14 марта 2019

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

Не существует лучшего решения для всех случаев.

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