← Back to list

Vamos ser sinceros: todo desenvolvedor já passou por aquele momento em uma entrevista técnica.

Recentemente, passei por isso. Me pediram para implementar um algoritmo de ordenação e, embora a teoria estivesse na ponta da língua, a…

Amorimvinicius · 2025-09-20 02:49 · 0 claps · 2.6 min read
#java #estruturas-de-dados #programação #desenvolvimentodesoftware
Open on Medium ↗

Estruturas de Dados com Java

Vamos ser sinceros: todo desenvolvedor já passou por aquele momento em uma entrevista técnica. A pergunta vem, você conhece o conceito, sabe a lógica, mas na hora de transformar aquilo em código… a sintaxe exata, a melhor implementação, o nome do método… simplesmente some.

Recentemente, passei por isso. Me pediram para implementar um algoritmo de busca em uma **LinkedHashMap , embora a teoria estivesse na ponta da língua a prática falhou por falta de revisão. Foi frustrante. Eu não lembrava como inicializar uma `LinkedHashMap`* nem os métodos para manipular essa estrutura. Acredito que isso se deva ao uso intensivo do Full Line Code Completion *das IDEs. Por isso, decidi um resumo para mim, um guia prático e direto.

Os Pilares: Conceitos que Você Precisa Dominar

1. Linear vs. Não Linear

  • Estruturas Lineares: Os dados estão em sequência, um após o outro. Pense em uma playlist de músicas. Exemplos: Arrays, Listas, Filas.
  • Estruturas Não Lineares: Os dados são hierárquicos ou formam uma rede. Pense na estrutura de pastas do seu computador. Exemplos: Árvores, Grafos.

2. A Métrica da Eficiência: Big O Notation

Como saber se um ArrayList é melhor que um LinkedList? A resposta está na complexidade medida pelo Big O. Ele nos diz como o tempo de execução de uma operação cresce conforme a quantidade de dados (n) aumenta.

Regra de ouro: Quanto menor o crescimento, mais eficiente é a operação. O(1) < O(log n) < O(n) < O(n log n) < O(n²)

3. Abstração vs. Implementação Concreta

Muitas estruturas de dados são conceitos abstratos. Elas são implementadas usando outras estruturas mais primitivas.

  • Exemplo: A interface List em Java é um conceito. ArrayList (que usa um array por baixo) e LinkedList (que usa nós interligados) são suas implementações concretas.

O Java Collections Framework (JCF)

List:

Pense na List como uma prateleira numerada. Cada item tem seu lugar (índice).

  • **ArrayList**: A escolha padrão. Ótimo para leitura por índice (O(1)), ruim para remoções no meio (O(n)).

  • **LinkedList**: O especialista em modificações. Ótimo para adicionar/remover nas pontas (O(1)), ruim para acesso por índice (O(n)).

Set:

Pense no Set como uma coleção que não aceita duplicatas.

  • **HashSet**: Velocidade acima de tudo (O(1)), mas não garante a ordem.
  • **TreeSet**: Organização e unicidade. Mantém os elementos sempre ordenados, com um custo de O(log n).

Map:

Pense no Map como um dicionário.

  • **HashMap**: A implementação para todas as horas. Rápida (O(1)), mas não garante ordem.
  • **TreeMap**: Quando a ordem das chaves importa (O(log n)). Implementa uma RBTree.

  • **LinkedHashMap**: Para lembrar a ordem em que os itens foram inseridos.

A Escolha Certa Faz a Diferença

Voltar aos fundamentos foi mais do que um exercício para uma entrevista. Foi um lembrete de que a base da engenharia de software de qualidade está em entender as ferramentas que usamos.


메타데이터
post_id
4d8daf0905a6
slug
vamos-ser-sinceros-todo-desenvolvedor-já-passou-por-aquele-momento-em-uma-entrevista-técnica-4d8daf0905a6
url
https://medium.com/@amorimvinicius3/vamos-ser-sinceros-todo-desenvolvedor-j%C3%A1-passou-por-aquele-momento-em-uma-entrevista-t%C3%A9cnica-4d8daf0905a6
canonical_url
https://medium.com/@amorimvinicius3/vamos-ser-sinceros-todo-desenvolvedor-j%C3%A1-passou-por-aquele-momento-em-uma-entrevista-t%C3%A9cnica-4d8daf0905a6
author_url
https://medium.com/@amorimvinicius3
status
ok
fetched_at
2026-07-24 22:13:21