Que tipos de coleções existem em Java?
sobes.tech IA
Resposta da IA
Em Java, os principais tipos de coleções são apresentados no Framework de Coleções J2SE e dividem-se em três categorias principais:
- Set:
- Coleções não ordenadas que não contêm duplicados.
- Implementações:
HashSet,LinkedHashSet,TreeSet.
- List:
- Coleções ordenadas cujos elementos são acessíveis por índice. Podem conter duplicados.
- Implementações:
ArrayList,LinkedList,Vector,Stack.
- Map:
- Armazenam pares "chave-valor". As chaves são únicas, os valores não. Os elementos são armazenados sem uma ordem específica (exceto
LinkedHashMapeTreeMap). - Implementações:
HashMap,LinkedHashMap,TreeMap,Hashtable.
- Armazenam pares "chave-valor". As chaves são únicas, os valores não. Os elementos são armazenados sem uma ordem específica (exceto
Para além destas interfaces principais (Set, List, Map), existem também outras menos comuns:
- Queue: Coleção concebida para manter elementos até ao seu processamento. Geralmente funciona sob o princípio FIFO (primeiro a entrar, primeiro a sair).
- Implementações:
PriorityQueue,ArrayDeque,LinkedList.
- Implementações:
- Deque: Fila de duas extremidades que suporta inserções e remoções em ambos os lados.
- Implementações:
ArrayDeque,LinkedList.
- Implementações:
A classe abstrata Collection é a interface raiz para a maioria da hierarquia de coleções (Set, List, Queue). Map não implementa Collection.
Exemplos de uso:
// ArrayList
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Duplicado permitido
// HashSet
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Ignorado, pois duplicados não são permitidos
// HashMap
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Orange", 1); // Os valores podem ser iguais
A escolha de uma implementação específica depende das características necessárias: necessidade de manter a ordem, permissão de duplicados, velocidade de acesso e inserção, multithreading, etc. Por exemplo, ArrayList é conveniente para acesso rápido por índice, LinkedList para inserções/remoções frequentes no meio, HashSet para busca rápida de elementos únicos, e HashMap para armazenar dados por chave.
Vector e Hashtable são implementações sincronizadas (thread-safe), mas geralmente é preferível usar versões não sincronizadas (ArrayList, HashMap) e gerir a sincronização noutro nível, ou usar coleções do pacote java.util.concurrent. LinkedHashSet e LinkedHashMap mantêm a ordem de inserção. TreeSet e TreeMap armazenam elementos em ordem ordenada.
ArrayDeque é frequentemente preferido ao Stack e LinkedList ao usar como pilha ou fila devido ao melhor desempenho.
PriorityQueue organiza os elementos de acordo com a sua ordem natural ou usando um Comparator.