𝗠𝗮𝘀𝘁𝗲𝗿 𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀

A maioria dos desenvolvedores usa ArrayList ou HashSet por padrão. Isso funciona para tarefas simples. Mas falha quando você precisa de velocidade ou escala.

Uma vez, construí um placar de jogo usando um ArrayList comum. Eu o ordenava toda vez que uma pontuação mudava. A interface (UI) travava constantemente. Eu estava lutando contra a linguagem em vez de usá-la.

Pare de usar as ferramentas erradas. Use estas três coleções especializadas para escrever um código mais rápido e limpo.

  1. EnumSet para Constantes Enum

Se você usar HashSet para enums, pagará um custo de performance. Cada inserção faz o autoboxing do enum em um objeto. Isso adiciona um overhead desnecessário.

O EnumSet usa um vetor de bits. Ele realiza verificações usando uma única instrução de CPU.

Antes: Set abilities = new HashSet<>(); abilities.add(Ability.FIRE);

Depois: EnumSet abilities = EnumSet.of(Ability.FIRE);

  1. NavigableSet para Consultas de Intervalo

Percorrer manualmente uma lista ordenada para encontrar um intervalo é lento e propenso a erros. Você frequentemente acaba com bugs de off-by-one.

O NavigableSet mantém seus dados ordenados automaticamente. Ele fornece buscas O(log n) para subconjuntos.

Antes: Collections.sort(scores); List topTen = scores.subList(size - 10, size);

Depois: NavigableSet scores = new TreeSet<>(Comparator.reverseOrder()); scores.add(1542); NavigableSet topTen = scores.headSet(scores.first(), true).stream().limit(10).collect(Collectors.toCollection(TreeSet::new));

  1. CopyOnWriteArrayList para Listas Intensivas em Leitura

Usar blocos sincronizados em um ArrayList torna cada leitura lenta. Também causa ConcurrentModificationException se uma thread escrever enquanto outra lê.

O CopyOnWriteArrayList cria uma nova cópia do array a cada escrita. Os leitores visualizam um snapshot do array.

Antes: List log = Collections.synchronizedList(new ArrayList<>()); // Iterar aqui pode causar um erro se um escritor entrar.

Depois: CopyOnWriteArrayList log = new CopyOnWriteArrayList<>(); // A iteração é segura e nunca falha.

Pare de recorrer sempre às mesmas duas coleções. Escolha a ferramenta que melhor se adapta ao seu padrão de dados.

Fonte: https://dev.to/timevolt/the-java-collections-force-mastering-the-hidden-gems-like-a-jedi-4438