Um guia abrangente sobre estruturas de dados em Java, com análise detalhada de trade-offs, complexidades e exemplos práticos.
🚀 Início Rápido • 📖 Documentação • 🎯 Exemplos • 🤝 Contribuir
- ✅ 21 documentos completos cobrindo todas as estruturas principais
- 📊 Análise de complexidade (Big O) para cada operação
- ⚖️ Trade-offs detalhados com prós e contras
- 💻 50+ exemplos práticos comentados
- 🎯 Guias de decisão interativos
- 🔬 Comparações lado a lado de estruturas similares
- Leia a Referência Rápida - Decisão em 30 segundos
- Use o Checklist - Perguntas para te guiar
- Consulte os exemplos - Código prático e funcional
- Comparação Geral - Tabelas comparativas completas
- Comparações de Código - Benchmarks e exemplos lado a lado
- Documentação específica - Mergulhe fundo em cada estrutura
| Estrutura | Acesso | Inserção | Uso Principal | Documentação |
|---|---|---|---|---|
| Array / ArrayList | O(1) | O(1)* | Lista geral | 📄 Docs |
| LinkedList | O(n) | O(1)† | Inserções nas pontas | 📄 Docs |
*Amortizado no final | †Nas pontas
| Estrutura | Operações | Ordenado | Documentação |
|---|---|---|---|
| HashSet | O(1) | ❌ | 📄 Docs |
| LinkedHashSet | O(1) | Inserção | 📄 Docs |
| TreeSet | O(log n) | ✅ | 📄 Docs |
| Estrutura | Operações | Ordenado | Thread-Safe | Documentação |
|---|---|---|---|---|
| HashMap | O(1) | ❌ | ❌ | 📄 Docs |
| LinkedHashMap | O(1) | Inserção | ❌ | 📄 Docs |
| TreeMap | O(log n) | ✅ | ❌ | 📄 Docs |
| ConcurrentHashMap | O(1) | ❌ | ✅ | 📄 Docs |
| Estrutura | Tipo | Operações | Documentação |
|---|---|---|---|
| ArrayDeque | Fila/Pilha | O(1) | 📄 Docs |
| PriorityQueue | Heap | O(log n) | 📄 Docs |
| Stack | Pilha ( |
O(1) | 📄 Docs |
// Mantendo ordem original
List<Integer> original = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);
List<Integer> semDuplicatas = new ArrayList<>(new LinkedHashSet<>(original));
// Resultado: [3, 1, 4, 5, 9, 2, 6]class LRUCache<K, V> extends LinkedHashMap<K, V> {
private final int capacity;
LRUCache(int capacity) {
super(capacity, 0.75f, true); // access-order
this.capacity = capacity;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > capacity;
}
}PriorityQueue<Integer> heap = new PriorityQueue<>();
for (int num : array) {
heap.offer(num);
if (heap.size() > k) heap.poll();
}
// heap contém os K maiores elementosPreciso de uma LISTA?
├─ Acesso por índice frequente? → ArrayList ⭐
├─ Inserções no início frequentes? → ArrayDeque
└─ Uso geral? → ArrayList (padrão seguro)
Preciso de CHAVE → VALOR?
├─ Multi-thread? → ConcurrentHashMap
├─ Ordenado? → TreeMap
├─ Ordem de inserção? → LinkedHashMap
└─ Uso geral? → HashMap ⭐ (padrão seguro)
Preciso ELIMINAR DUPLICATAS?
├─ Sem ordem? → HashSet ⭐ (mais rápido)
├─ Manter ordem? → LinkedHashSet
└─ Ordenado? → TreeSet
Preciso de FILA/PILHA?
├─ Pilha (LIFO)? → ArrayDeque ⭐
├─ Fila (FIFO)? → ArrayDeque ⭐
└─ Por prioridade? → PriorityQueue
- QUICK_REFERENCE.md - Referência rápida com decisão em 30s
- CHECKLIST.md - Checklist interativo para escolha
- COMPARACOES_CODIGO.md - Comparações lado a lado
- Guia de Seleção - Árvore de decisão completa
- Comparação Geral - Tabelas comparativas
Listas:
Sets:
Maps:
Queues & Stacks:
- 🥇 Na dúvida, use ArrayList (para listas)
- 🥇 Na dúvida, use HashMap (para mapas)
- ⚡ ArrayDeque > LinkedList (para pilhas e filas)
- ⚡ HashSet > TreeSet (se não precisa de ordem)
⚠️ NUNCA use: Stack, Hashtable, Vector (legados)
Contribuições são bem-vindas! Sinta-se livre para:
- 🐛 Reportar bugs ou erros
- 💡 Sugerir novos exemplos
- 📝 Melhorar a documentação
- ⭐ Dar uma estrela se achou útil!
Este projeto está sob a licença MIT. Livre para uso educacional e comercial.
- 21 documentos markdown
- 4400+ linhas de documentação
- 50+ exemplos práticos
- Cobertura de 17 estruturas de dados
Feito com 💜 para a comunidade Java