Какой тип списка генерируется List.of () в Java - PullRequest
0 голосов
/ 29 октября 2018
Employee john = new Employee("John", "Brown", 32, 100);
Employee camila = new Employee("Camila", "Smith", 25, 101);
Employee pat = new Employee("Pat", "Hanson", 23, 102);

List<Employee> employeeList = List.of(john, camila, pat);

Какой тип List генерируется методом List.of(). Это ArrayList или LinkedList?

Ответы [ 3 ]

0 голосов
/ 29 октября 2018
List<Employee> employeeList = List.of(john, camila, pat);

более или менее равно

List<Employee> employeeList = Collections.unmodifiableList(Arrays.asList(john, camila, pat));

Если вы беспокоитесь о конкретной реализации List, сделайте это самостоятельно, это намного лучше.

0 голосов
/ 30 октября 2018

Вы можете взглянуть на различные List#of методы в исходном коде OpenJDK .

(Очевидно, что шаблон был вдохновлен соответствующими классами Guava. См. Почему в ImmutableList Guava так много перегруженных методов ()? )

Метод, который не специализирован для определенного числа аргументов, создает экземпляр ImmutableCollections.ListN, который просто хранит копию (!) Массива varargs и предоставляет простые реализации методов List для доступа к массиву.

Но, как уже отмечали другие: Точный тип не должен иметь значения!

Единственное, что может иметь значение, это то, что возвращаемый список также реализует RandomAccess. Хотя это, похоже, не указано явно в документации для неизменяемых списков , на это я бы лично положился. Они никогда не изменят это, чтобы стать чем-то вроде связного списка или около того ...

0 голосов
/ 29 октября 2018

Ни. Согласно документам для List.of() возвращается:

Возвращает неизменный список, содержащий произвольное количество элементов.

Обратите внимание, что интерфейс List, который ArrayList и LinkedList реализуют

Если мы запустим этот код:

List<Integer> listOf = List.of(1,2,3);
System.out.println(listOf.getClass());

Получаем:

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