Logo

dev-resources.site

for different kinds of informations.

Item 37: Use EnumMap em vez da indexação ordinal

Published at
6/27/2024
Categories
java
javaprogramming
Author
javaefetivo
Categories
2 categories in total
java
open
javaprogramming
open
Author
11 person written this
javaefetivo
open
Item 37: Use EnumMap em vez da indexação ordinal

1. Introdução

  • Código que usa o método ordinal para indexar um array ou lista.

2. Problema com o uso de ordinais

  • Código de exemplo com array indexado pelo ordinal do ciclo de vida de uma planta.
  • Arrays não são compatíveis com genéricos, resultando em cast não verificado.
  • Necessidade de rotulação manual da saída.
  • Perigo de usar valores int incorretos, levando a erros silenciosos ou exceções. Image description

Image description

3. Solução com EnumMap

  • EnumMap como uma alternativa mais eficiente e segura.
  • Programa reescrito utilizando EnumMap.
  • Benefícios: código mais curto, claro, seguro e sem necessidade de rotulação manual.

4. Detalhes sobre EnumMap

  • EnumMap utiliza um array internamente, combinando a segurança de Map com a rapidez de um array.
  • Construtor de EnumMap requer um objeto Class do tipo da chave (token de tipo limitado). Image description

5. Uso de streams com EnumMap

  • Programa usando streams para gerenciar o map.
  • Problema: implementação de map escolhida pelo stream pode não ser uma EnumMap.
  • Solução: uso da forma de três parâmetros do Collectors.groupingBy para especificar a implementação de map.

6. Comparação de comportamentos

  • Diferenças de comportamento entre versões com EnumMap e baseadas em stream.
  • EnumMap sempre cria um map aninhado, enquanto streams criam apenas se necessário.

7. Caso de uso avançado: mapeamento de dois valores enum

  • Exemplo de array de arrays indexados por ordinais para transições de fases.
  • Problemas semelhantes: risco de erro na tabela de transição, manutenção difícil. Image description

8. Solução avançada com EnumMap

  • Uso de EnumMap para mapear transições de fases.
  • como tipo do map.
  • Inicialização do map com coletores encadeados.
  • Image description

Image description

Image description

9. Adição de novas fases

  • Adicionar novas fases ao sistema com EnumMap é simples e seguro.
  • Comparação com a complexidade de atualização de arrays.

10. Cuidados com valores nulos

  • Uso de null para indicar ausência de mudança de estado é arriscado.
  • Necessidade de uma solução limpa para evitar NullPointerException.

11. Conclusão

  • Raramente adequado utilizar ordinais para indexar arrays.
  • Preferência pelo uso de EnumMap, especialmente para relacionamentos multidimensionais.

Resumo Final

  • Não use ordinais para indexar arrays.
  • Prefira EnumMap para segurança, clareza e facilidade de manutenção.
  • Considere EnumMap<..., EnumMap<...>> para relacionamentos multidimensionais.
javaprogramming Article's
29 articles in total
Favicon
10 Best Java Programming Books for 2025
Favicon
JDK Setup On Linux, Windows, Mac
Favicon
Modificadores de acesso da linguagem Java
Favicon
Capítulo 6 Verificação minuciosa dos métodos e classes
Favicon
Ciclo de Vida de Objetos Java
Favicon
Introdução às Classes, Objetos e Métodos
Favicon
Item 43: Dê preferência às referências para métodos em vez dos lambdas
Favicon
Item 42: Prefira os lambdas às classes anônimas
Favicon
Reflexão sobre itens 22 e 41 do livro
Favicon
Item 41: Use as interfaces marcadoras para definir tipos
Favicon
Item 40: Use a anotação Override com frequência
Favicon
**Exploring Object-Oriented Programming (OOP) Concepts with Java**
Favicon
Teste do Capítulo 2
Favicon
Expressões em Java
Favicon
Tente Isto 2-2 Tabela-Verdade para os Operadores Lógicos
Favicon
Precedência de operadores
Favicon
Item 37: Use EnumMap em vez da indexação ordinal
Favicon
Encoding
Favicon
Palavras-Chaves
Favicon
Teste do Capítulo 1
Favicon
Tente Isto 1-2 Melhore o conversor
Favicon
Item 33: Pense na possibilidade de usar contêineres heterogêneos typesafe
Favicon
Item 32: Seja criterioso ao combinar os genéricos com os varargs
Favicon
Item 31: Use os wildcards limitados para aumentar a flexibilidade da API
Favicon
Prefira as listas aos arrays
Favicon
Understanding Data Types in Java
Favicon
As a freelance java code developer can I get clients where there are developers offering services at extremely low rates?
Favicon
Basic java tutorial and java programs
Favicon
How to replace all '0' with '5' without using string or predefined method in java?

Featured ones: