A maioria dos devs utiliza arrays para tudo — e isso é um problema
Você provavelmente não utiliza as estruturas de dados da sua linguagem da maneira correta.
A maioria dos desenvolvedores acaba utilizando arrays/listas e objetos/dicionários em todos os cenários. Mas fazendo isso, tu perde a oportunidade de experimentar novas estruturas de dados e impactar positivamente na performance e escalabilidade do teu software.
Caso tu já tenha estudado sobre estruturas de dados, especialmente as lineares (linked-lists, filas, pilhas…), talvez a primeira impressão que dê seja de que todas elas são meio parecidas.
Então surge a dúvida: “Por que utilizar diferentes estruturas de dados se elas fazem a mesma coisa?”
Por que usar um Set se eu posso usar uma lista e depois verificar a existência de um item?
Por que usar um heap se eu posso usar uma lista e sempre buscar pelo maior elemento e removê-lo?
A resposta é bem simples: cada estrutura de dados tem um caso de uso muito específico e precisamos considerar alguns fatores como: volume de dados, operações e garantias, propriedades dos dados e custo de implementação.
📈 Volume dos dados:
Tu precisa armazenar 10 itens ou 10 mil itens?
Buscar o maior elemento em uma lista de 10 itens não causa quase nenhum impacto, mas e em um array com milhares de itens?
O problema não aparece no começo — aparece quando o sistema escala.
🔢 Tipos de Operações
Tu precisa buscar um elemento específico no meio de uma grande quantidade de dados?
- Precisa acessar esses dados por chave?
- Precisa inserir/remover itens frequentemente?
Ex.:
Deques são mais eficientes inserindo/removendo itens nas extremidades
Use Sets se tudo que tu quer é agrupar itens para verificar se eles existem ou não. Eles são muito mais eficientes do que listas para realizar essa tarefa.
Entenda o que você quer fazer com os dados que você está trabalhando.
🧩 Propriedades dos dados
Teus dados precisam estar ordenados? Existem regras específicas para essa ordenação (como uma propriedade de Heap, por exemplo)?
Precisam representar uma hierarquia? Ex.: Comentários com respostas
Precisam representar conectividade? Ex.: Conexões do LinkedIn
Entender as características específicas dos teus dados é essencial para otimizar os algoritmos.
✅ O que cada estrutura garante
Tua estrutura garante operações em O(1)? Imutabilidade? Ordem de inserção?
Quando você entende quais propriedades que você precisa e quais propriedades a estrutura oferece, fica mais fácil decidir qual estrutura usar.
🚀 Custo de implementação
Às vezes é mais rápido desenvolver utilizando estruturas simples, como listas, e muitas vezes isso não causa um impacto significativo.
Tudo depende do que você quer desenvolver. Aplicações e projetos pequenos não exigem alta otimização, já sistemas grandes ou APIs robustas isso faz bastante diferença.
Há também casos onde as soluções não são apenas “melhores” com certas estruturas — elas praticamente dependem delas.
Algoritmos como Dijkstra e Kruskal só fazem sentido quando trabalhamos com grafos, já que trabalham com conectividade e pesos entre os elementos.
Conclusão:
É necessário compreender quais são as estruturas de dados da tua linguagem, nem todas elas abordam as mesmas estruturas.
JavaScript não possui deques e nem filas de prioridade, mas possui sets e maps; mas no geral todas as linguagens modernas utilizam estruturas parecidas.
O importante é entender as estruturas que tua linguagem dá suporte e saber onde utilizar cada uma delas quando for necessário.