Listas são a coleção de sequências ordenadas do Java.
Diferente dos arrays, uma List pode crescer de tamanho para acomodar qualquer número de itens.
Uma implementação padrão é a ArrayList, que é sustentada por um array redimensionável.
Outra implementação padrão é a classe LinkedList, que é sustentada por uma lista duplamente encadeada.
As Lists podem estar vazias ou conter qualquer número de itens (inclusive duplicatas).
As Lists são uma interface genérica tipada para indicar que tipo de objetos elas podem conter.
Por exemplo:
List<String> emptyListOfStrings = List.of();
List<Integer> singleInteger = List.of(1);
List<Boolean> threeBooleans = List.of(true, false, true);
List<Object> listWithMultipleTypes = List.of("hello", 1, true);
As Lists têm vários métodos úteis para adicionar, remover, obter e verificar se um elemento está presente:
List<Character> vowels = new ArrayList<>(List.of('a', 'e', 'i', 'o', 'i', 'e', 'a'));
int startingSize = vowels.size(); // 7
vowels.add('u'); // vowels is now ['a', 'e', 'i', 'o', 'i', 'e', 'a', 'u']
char a = vowels.get(0); // 'a'
boolean hadI = vowels.remove('i'); // true and vowels is now ['a', 'e', 'o', 'i', 'e', 'a', 'u']
boolean hasI = vowels.contains('i'); // true (still have one more left)
A classe Collections também tem alguns utilitários úteis para lidar com coleções como a List:
List<Integer> numbers = new ArrayList<>(List.of(1, 5, 3, 2, 4));
Collections.sort(numbers); // [1, 2, 3, 4, 5]
Collections.reverse(numbers); // [5, 4, 3, 2, 1]
Collections.fill(numbers, 42); // [42, 42, 42, 42, 42]
List<Integer> fiveNines = Collections.nCopies(5, 9); // [9, 9, 9, 9, 9]