𝗠𝗮𝘀𝘁𝗲𝗿 𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀
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.
- 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.
- Use quando tiver um conjunto fixo de valores de enum.
- Ele reduz a coleta de lixo (garbage collection).
- Ele proporciona um aumento de velocidade de 10x em loops intensos.
Antes:
Set
Depois:
EnumSet
- 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.
- Use para tabelas de pontuação máxima ou faixas de preço.
- Use headSet() ou subSet() para capturar intervalos específicos.
- Ele elimina a necessidade de código de ordenação manual.
Antes:
Collections.sort(scores);
List
Depois:
NavigableSet
- 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.
- Use para listeners de eventos ou configurações de sistema.
- Use quando as leituras ocorrem com muito mais frequência do que as escritas.
- Ele permite leituras sem bloqueio (lock-free).
Antes:
List
Depois:
CopyOnWriteArrayList
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