HOWTO · Java
Obtenha o último elemento de um ArrayList em Java
Esta postagem trata de obter o último elemento de uma ArrayList em Java.
Nesta página
Para obter o último elemento de um ArrayList em Java, leia o elemento na posição list.get(list.size() - 1). Java usa índices começando em zero; por isso, o último índice válido é um a menos que o tamanho da lista. Diferentemente das listas do Python, as listas em Java não aceitam índices negativos, como -1, para acessar o elemento final.
Obtenha o último elemento com size() e get()
Chame size() para saber quantos elementos a lista contém, subtraia um para calcular o último índice e passe esse índice para get(). Por exemplo, uma lista com quatro elementos tem índices válidos de 0 a 3; assim, seu último elemento está no índice 4 - 1.
Execute este exemplo. O exemplo e os rótulos ou saídas exibidos nesta seção permanecem em inglês:
import java.util.ArrayList;
public class LastElement {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
int last = numbers.get(numbers.size() - 1);
System.out.println(last);
}
}
40
Essa consulta direta costuma ser a opção mais adequada quando o valor é um ArrayList e você precisa do elemento final. Ela não exige uma stream, uma sublista copiada nem a conversão para outra coleção.
Trate uma ArrayList vazia
Uma lista vazia tem tamanho zero; portanto, size() - 1 resulta em -1. Passar esse índice para get() lança IndexOutOfBoundsException. Verifique a lista antes de acessá-la e escolha um resultado adequado às necessidades de quem chama o método.
Se um método representar “nenhum elemento” com null, deixe esse contrato explícito. Este auxiliar também rejeita uma lista nula, em vez de tratá-la como vazia. No exemplo, a saída textual No elements permanece em inglês:
import java.util.ArrayList;
public class LastElement {
static <T> T lastOrNull(ArrayList<T> list) {
if (list == null) {
throw new IllegalArgumentException("list must not be null");
}
return list.isEmpty() ? null : list.get(list.size() - 1);
}
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
String last = lastOrNull(names);
System.out.println(last == null ? "No elements" : last);
}
}
No elements
Retornar null é simples, mas quem chama o método precisa distinguir “nenhum elemento” de um valor null legítimo na lista. Se essa distinção for importante, retorne um Optional<T> ou deixe que o código chamador trate a lista vazia antes de chamar get(). Não capture IndexOutOfBoundsException como substituto para decidir o que uma entrada vazia deve significar.
Escolha uma coleção para acessar as extremidades repetidamente
Para uma única consulta, converter um ArrayList em ArrayDeque ou LinkedList exige alocação e cópia dos elementos, sem beneficiar a lista original. Mantenha o ArrayList e use seu último índice.
Se o programa adiciona e remove elementos repetidamente nas duas extremidades, escolha desde o início um deque adequado a esse padrão de acesso. ArrayDeque oferece operações nas extremidades, como addLast() e getLast(); LinkedList também oferece getLast(), mas tem características diferentes de armazenamento e uso de memória. Essas opções devem ser consideradas ao projetar a coleção, não como atalhos para uma única leitura. ArrayDeque não permite elementos nulos; leve isso em conta se valores nulos fizerem parte do modelo de dados.
Use Iterables.getLast() do Guava
Se o projeto já depende do Guava, Iterables.getLast(iterable) é uma alternativa opcional para um Iterable. A documentação oficial da API do Guava para Iterables.getLast() descreve as duas sobrecargas: o método com um argumento lança NoSuchElementException quando o iterable está vazio, enquanto Iterables.getLast(iterable, defaultValue) retorna o valor padrão fornecido quando não há elementos.
Essa opção exige que o Guava esteja no classpath do projeto; ele não faz parte da biblioteca padrão do Java. Para um ArrayList em um projeto que não precise do Guava por outros motivos, size() e get() mantêm o código sem dependências adicionais.
Resumo
Use list.get(list.size() - 1) para recuperar o último elemento de um ArrayList não vazio. Primeiro verifique se a lista está vazia e defina claramente o que fazer quando não houver elemento, pois uma lista vazia produz o índice -1 e get() lança IndexOutOfBoundsException. Evite converter a lista para uma única consulta; considere ArrayDeque ou outra coleção somente quando o padrão mais amplo exigir operações repetidas nas extremidades. Iterables.getLast() do Guava é uma opção quando essa dependência já for adequada.