Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Параметры коллекций java

#java #коллекции


Встречаю различные варианты декларирования коллекций: 

List list = new ArrayList(); //1

List list = new ArrayList(); // 2

List list = new ArrayList(); //3  


И совершенно нет ясности, какие объекты в какую коллекцию можно положить. Экспериментально
выяснил, что в коллекцию 2 - можно добавить объекты (Object). А в коллекцию 3 - только
с типом Integer.

Вопрос 1: как понять по декларированию, какие объекты может содержать коллекция?

Вопрос 2: для каких прикладных задач можно использовать первый, второй и третий вариант
декларирования коллекций?
    


Ответы

Ответ 1



quizful.net/post/Java-Collections - о Коллекциях в Java. quizful.net/post/java-generics-tutorial - Дженерики. Ключ к пониманию коллекций. По вопросу 1: Тот тип, что в угловых скобках <> - должен быть у объектов, которые может вмещать коллекция. По вопросу 2: 1 и 3 - используем, когда нужно хранить изменяемый по вместимости массив целых чисел. 2 - когда нужно оперировать с коллекциями, которые могут содержать разные типы данных. Т.е. мы можем под list иметь как коллекцию целых, так и коллекцию строк или коллекцию коллекций. Про интерфейсы (в ООП или в Java в частности) рекомендую почитать в первую очередь. И про модель организации данных в памяти компьютера. Если кратко, то все классы в Java - наследники класса Object. Интерфейс List определён как public interface List extends Collection (см. docs.oracle.com/javase/8/docs/api/java/util/List.html). Объявление List list можно читать как List list. Соответственно, раз в листе могут содержаться любые объекты, которые расширяют класс, который может содержать коллекция - то мы можем поместить под ссылку list объект листа объектов любого класса. (arininav.ru/js/java04.htm см. пункты 5.4.1.3. и 5.4.1.4.)

Ответ 2



Параметр типа коллекции содержится в левой части, что написано в правой части значения не имеет. Таким образом, записи (1, 3) полностью идентичны: List list = new ArrayList(); //1 List list = new ArrayList(); //3 Вы можете вписывать в правую часть параметр или не вписывать, как вам удобно. Компиляция (по ссылке выше) показала, что на время выполнения запись никак не влияет. Тогда как в выражении 2: List list = new ArrayList(); //2 Тип не указан в левой части, значит тип - любой объект Object.

Комментариев нет:

Отправить комментарий