Junior
Qual é a diferença entre HashMap e LinkedList?
sobes.tech IA
Resposta da IA
- Implementa um array associativo (mapa "chave-valor").
- O acesso, inserção e remoção de elementos têm uma complexidade média de O(1).
- A ordem dos elementos não é garantida.
- Utiliza hashing para uma busca rápida.
// Exemplo de uso de HashMap
import 'dart:collection';
void main() {
final HashMap<String, int> inventario = HashMap();
inventario['maçãs'] = 5;
inventario['bananas'] = 10;
print(inventario['maçãs']); // Mostrará 5
}
- Implementa uma lista ligada.
- O acesso a um elemento por índice tem uma complexidade de O(n).
- Inserção e remoção de elementos no início ou no fim da lista têm uma complexidade de O(1).
- É eficiente para operações de adição/remoção de elementos em qualquer parte da lista (se houver referência ao nó) com uma complexidade de O(1).
- Suporta inserção e remoção de elementos mantendo referências aos nós (
LinkedListEntry), garantindo O(1). - A ordem dos elementos corresponde à ordem de inserção.
// Exemplo de uso de LinkedList
import 'dart:collection';
void main() {
final LinkedList<String> listaCompra = LinkedList();
listaCompra.addFirst(LinkedListEntry('Leite'));
listaCompra.add(LinkedListEntry('Pão')); // Adiciona ao final
print(listaCompra.first); // Mostrará Leite
print(listaCompra.where((entry) => entry.element == 'Pão').first.element); // Exemplo de acesso, não ótimo
}
// Exemplo de uso de LinkedListEntry
class LinkedListEntry<T> extends LinkedListEntry<LinkedListEntry> {
final T data;
LinkedListEntry(this.data);
@override
String toString() => data.toString();
}
| Característica | HashMap | LinkedList |
|---|---|---|
| Estrutura de dados | Array associativo | Lista ligada |
| Armazenamento | Pares chave-valor | Nodos (elementos) |
| Acesso por índice | Não suportado diretamente | O(n) |
| Acesso por chave | O(1) (em média) | Não suportado |
| Inserção/Remoção | O(1) (em média) | O(1) (no início/fim), O(1) (por referência ao nó) |
| Ordem dos elementos | Não garantida | Mantém a ordem de inserção |
| Uso de memória | Maior devido ao hashing | Menor se os nós forem pequenos |
| Uso principal | Busca rápida por chave | Operações eficientes no início/fim/toda parte (por referência) |