Sobes.tech
Junior

Qual é a diferença entre HashMap e LinkedList?

sobes.tech IA

Resposta da IA

HashMap

  • 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
}

LinkedList

  • 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)