𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀: 𝗢𝘀 𝗛𝗲𝗿𝗿𝗮𝗺𝗲𝗻𝘁𝗮𝘀 𝗢𝗰𝘂𝗹𝘁𝗮𝘀 𝗤𝘂𝗲 𝗩𝗼𝗰𝗲̂ 𝗘𝘀𝘁𝗮́ 𝗣𝗲𝗿𝗱𝗲𝗻𝗱𝗼
A maioria dos desenvolvedores usa as coleções do Java da mesma maneira todos os dias. Eles usam ArrayLists e HashSets. Mas você pode estar perdendo ferramentas que tornam seu código mais rápido e seguro.
Aqui estão três ferramentas específicas para melhorar seu código.
- Arrays.asList não é uma List verdadeira
Quando você usa Arrays.asList(array), você obtém uma lista de tamanho fixo. Ela está vinculada diretamente ao seu array original.
- Se você alterar o array, a lista muda.
- Se você tentar adicionar ou remover itens, seu código falhará com um erro.
Para corrigir isso, envolva-o em um novo ArrayList:
List<String> list = new ArrayList<>(Arrays.asList(array));
Isso cria uma lista real e independente que você pode modificar.
- Use EnumSet para melhor desempenho
Você armazena enums em um HashSet? Isso cria um overhead desnecessário. HashSets usam tabelas de hash e cabeçalhos de objeto.
Use EnumSet em vez disso. Ele utiliza um vetor de bits internamente. É extremamente rápido e consome quase nada de memória. É perfeito para sistemas baseados em flags, como poderes de jogadores ou configurações.
- É seguro quanto ao tipo (type-safe).
- É muito mais rápido que um HashSet.
- Ele lida com operações bitwise para você.
- Use ConcurrentHashMap.computeIfAbsent para caches
Se você construir um cache, muitas vezes escreverá um código complexo para evitar que múltiplas threads calculem o mesmo valor. Isso é chamado de double-checked locking. É difícil de ler e fácil de quebrar.
Em vez disso, use apenas uma linha:
cache.computeIfAbsent(key, this::expensiveCalculation);
Este método é atômico. Ele garante que o cálculo seja executado apenas uma vez, mesmo que muitas threads solicitem a mesma chave ao mesmo tempo. Isso reduz bugs e torna sua intenção clara.
Por que essas ferramentas são importantes:
- Desempenho previsível: Você evita custos de memória ocultos.
- Menos bugs: Você para de lutar contra condições de corrida (race conditions) em código multi-thread.
- Código mais claro: Outros desenvolvedores entendem seu design imediatamente.
Pare de lutar contra o framework. Comece a usá-lo para escrever um código mais enxuto e seguro.