✅ Resumo Rápido da Relação
| Estrutura | Precisa de ordenação? | Usa Comparable? | Aceita Comparator? | Observações |
|---|---|---|---|---|
ArrayList | ❌ Não | Opcional (para sort()) | ✅ Sim (em Collections.sort) | Ordem só se for explicitamente pedida |
TreeSet | ✅ Sim | ✅ Sim | ✅ Sim | Ordena automaticamente |
TreeMap | ✅ Sim | ✅ Sim | ✅ Sim | Chaves são ordenadas |
ArrayDeque | ❌ Não | ❌ Não | ❌ Não | Estrutura de fila/pilha — ordem de inserção |
🔍 Vamos detalhar:
1. ArrayList
- Não depende de ordenação.
- É apenas uma lista dinâmica que mantém a ordem de inserção.
- Você pode ordenar usando
Collections.sort()oulist.sort():- Se os elementos implementarem
Comparable, será usada a ordem natural (compareTo). - Você também pode passar um
Comparator.
- Se os elementos implementarem
List<String> lista = new ArrayList<>();
lista.add("C");
lista.add("A");
lista.add("B");
// Usa compareTo de String
Collections.sort(lista);
// Usa Comparator
Collections.sort(lista, Comparator.reverseOrder());
2. TreeSet
- É um Set ordenado.
- Depende de uma forma de ordenação:
- Usa
compareTo()(implementação deComparable) se nada for fornecido. - Ou você fornece um
Comparatorno construtor.
- Usa
- O
TreeSetnão aceita elementos duplicados, com base na ordenação.
// Ordem naturalSet<Integer> treeSet = new TreeSet<>();// Ordem reversa
Set<String> treeSet2 = new TreeSet<>(Comparator.reverseOrder());
3. TreeMap
- É um Map ordenado pelas chaves.
- Assim como o
TreeSet, precisa que as chaves implementemComparable, ou que você forneça umComparator.
// Ordena pelas chavesMap<String, Integer> mapa = new TreeMap<>();// Ordem reversa
Map<String, Integer> mapa2 = new TreeMap<>(Comparator.reverseOrder());
Se a classe usada como chave não for comparável, ou não for fornecido um Comparator, o TreeMap lança ClassCastException na hora de inserir.
4. ArrayDeque
- É uma estrutura de fila/pilha (deque).
- Não depende de ordenação.
- Não usa nem
Comparable, nemComparator. - A ordem de acesso é baseada na ordem de inserção e remoção (como em fila ou pilha).
Deque<String> deque = new ArrayDeque<>();
deque.add("A");
deque.add("B");
System.out.println(deque.remove()); // Remove "A" (FIFO)
🎯 Dica para a Prova (OCP/OCA):
TreeSeteTreeMapsempre ordenam. Logo, precisam de elementos ordenáveis (viaComparableouComparator).ArrayListnão se importa com ordenação, a menos que você chame algo comoCollections.sort().ArrayDequenão pode ser ordenado.