Правильное объявление коллекций

133
13 января 2021, 14:50
Set set = new HashSet(); 
Map map = new HashMap();
List list = new ArrayList();

Почему для этих реализаций пишут вот так, а не вот так:

HashSet set = new HashSet();
HashMap map = new HashMap();
ArrayList list = new ArrayList();

Я понимаю что допустим Set это интерфейс, а ArrayList реализация/ Используют List list = new ArrayList(); потому что методы

List(a) + методы ArrayList = perfect?
Из-за этого пишут List list = new ArrayList();? Поясните пожалуйста

Answer 1

Для начала, так пишут как минимум потому, что нельзя сделать объект в виде интерфейса, то есть, вы не можете сделать так

List list = new List ();
Map map = new Map ();

Посмотрите на этот вопрос,где вы также сможете вот эту статью, которая, возможно, он вам вам более полно даст ответ.

В кратце, ваш пример

HashSet set = new HashSet();

HashMap map = new HashMap();

ArrayList list = new ArrayList();

не будет считаться ошибкой, его можно улучшить, потому что в будущем, при работе с большим объемом кода, вам проще обращаться именно к интерфейсу, или так скажем, к более общему объекту/классу/сущности, нежели к ее конкретной реализации.

Например, у вас будет интерфейс Programmer и классы, которые реализуют его JavaProgrammer, JavaScriptProgrammer, PhpProgrammer ... Вам ведь удобнее в List добавлять Программистов, а не создавать для каждого типа программистов свой лист, ведь так? В итоге у вас просто будет

List<Programmer> программисты = Arrays.AsList(new JavaProgrammer(),new JavaScriptProgrammer(), new PhpProgrammer()  );

вместо отедльных списков для каждого типа программиста.

Answer 2

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

public void someMethod(List<String> list)  {
} 

В этот метод вы можете передавать ArrayList, LinkedList и любую другую коллекцию, реализующую List.

READ ALSO
Ошибка startForeground в Android 8.1

Ошибка startForeground в Android 8.1

Вот такая проблема: показывается список песен - нажимаю на на любую, для воспроизведения, показывает ошибку androidapp

112
Выдвигающаяся панель сбоку

Выдвигающаяся панель сбоку

Цель: Осуществить в приложении возможность выдвигать панель сбоку

135
Получить value из элемента листа JS [закрыт]

Получить value из элемента листа JS [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

103