Мы уже знакомы с классическим списком ArrayList и неизменяемой обёрткой Collections.unmodifiableList(). Теперь — о некоторых специальных списках.
Список из одного элемента
Если нужен неизменяемый список из одного элемента, используется Collections.singletonList(). Например, так:
class TruePunk {
private final List<String> preferredMusicGenres = Collections.singletonList("punk");
List<String> getPreferredMusicGenres() {
return preferredMusicGenres;
}
}
Пустой список
Если нужен пустой список, можно использовать Collections.emptyList(). Это неизменяемый список нулевого размера.
class PersonIndifferentToMusic {
List<String> getPreferredMusicGenres() {
return Collections.emptyList();
}
}
Список из массива
Мостом между миром массивов и миром списков служит Arrays.asList(). Этот метод создаёт список, который проксирует операции чтения и записи к оригинальному массиву. Его метод add нерабочий (бросает исключение), т. к. размер нижележащего массива неизменен, а методы get(int index) и set(int index, Object value) читают и записывают массив соответственно.
String[] genresArray = { "metal", "metalcore", "symphonic metal", null, null };
System.out.println(Arrays.toString(genresArray));
genresArray[3] = "post-hardcore";
System.out.println(Arrays.toString(genresArray));
List<String> genresList = Arrays.asList(genresArray);
genresList.set(4, "progressive metal");
System.out.println(Arrays.toString(genresArray));
System.out.println(genresList);
[metal, metalcore, symphonic metal, null, null] [metal, metalcore, symphonic metal, post-hardcore, null] [metal, metalcore, symphonic metal, post-hardcore, progressive metal] [metal, metalcore, symphonic metal, post-hardcore, progressive metal]