Executando verificação de segurança...
2

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.

Carregando publicação patrocinada...
2

Depende muito de linguagem a ser utilizada e o contexto. Um linked list hoje em dia é para casos muito especifíco.

Linguagens como Rust temos diversos tipos de estruturas como array, vectors e tuples. Elas se comportam de maneira semelhante, mas cada uma tem seus próprios trade-offs.

Tua estrutura garante operações em O(1)?

Nem todas as estruturas garantem isso. Eu mesmo nunca vi nenhuma que garante isso para todas as operações na estrutura. Sempre há um trade-off.

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.

É só implementar quando necessário. Não são estruturas difícieis de implementar e dependendo do caso, justifica uma complexidade a mais para ter um produto mais otimizado. Maps e Sets são estruturas mais complexas que não substitutem outras.


O post parece misturar algoritmos com estrutura de dados e tangenciado o uso massivo do array. Uso esse que é problemático dependendo do contexto.

Em JavaScript só temos array. Para quem usa JavaScript otimização não é prioridade senão nem estava utilizando JavaScript para começar. É bom colocar na cabeça que, por mais que JavaScript seja lento, para nós, humanos, ainda é bem rápido (até o sistema escalar demais).

A estrutura correta depende fortemente da aplicação e do contexto. Porém eu acredito que o post foi direcionado ao hábito de usar a mesma coisa porque sim. Isto de fato, é um problema crítico para qualquer devs (que eu mesmo já passei).

1

Opa! Obrigado pelo comentário!

Bom, na verdade eu concordo com teu comentário, mas eu acredito que independente da tua linguagem é essencial tu se munir com as estruturas que ela oferece nativamente e também entender estruturas clássicas (linked-lists, trees, stacks...).

Entender as estruturas que tua linguagem já implementa nativamente é mais simples e é algo que muitas vezes tu vai acabar.

Se tu trabalha com Java, estude sobre LinkedList, Deque/ArelasrayDeque, HashMap e outras estruturas que a linguagem oferece.

A menos que teu sistema dependa de uma estrutura específica ou que tu priorize muito performance não vejo razão pra implementar uma estrutura manualmente. Isso é algo que tu vai querer fazer depois, quando as coisas escalarem.