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();? Поясните пожалуйста
Для начала, так пишут как минимум потому, что нельзя сделать объект в виде интерфейса, то есть, вы не можете сделать так
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() );
вместо отедльных списков для каждого типа программиста.
List- это интерфейс, все коллекции, которые его реализуют, реализуют все его методы. Поэтому удобно(и принято в ооп) использовать интерфейсы. На пример в качестве аргумента в методе вы можете использовать интерфейс List
public void someMethod(List<String> list) {
}
В этот метод вы можете передавать ArrayList, LinkedList и любую другую коллекцию, реализующую List.
Продвижение своими сайтами как стратегия роста и независимости