A pesquisa principal deste artigo é o conteúdo relevante do enummap, em vez do índice ordinal em Java, que é introduzido da seguinte forma.
Notas do estudo "Edição chinesa eficaz Java 2"
É frequentemente encontrado usando o método ordinal da Enum para indexar os tipos de enum.
classe pública Herb {public Enum Type {anual, perene, bienal}; Nome da string final privada; Tipo final privado; Erva (nome da string, tipo tipo) {this.name = name; this.type = type; } @Override public String tostring () {Return Name; }}Agora, suponha que haja uma variedade de ervas representando plantas em um jardim que você deseja organizar por tipo (anual, perene ou bienal) antes de listar essas plantas. Se você quiser fazer isso, precisa construir três conjuntos, um para cada tipo e iterar em todo o jardim e colocar cada erva no conjunto correspondente. Alguns programadores fazem isso colocando esses conjuntos em uma matriz indexada por números ordinais de tipos.
// Usando Ordinal () para indexar uma matriz - não faça thisHerb [] Garden = ...; // Indexado por Herb.type.ordinal () Set <Herb> [] HerbsbyType = (set <derb> []) novo conjunto [Herb.type.values (). para (int i = 0; i <herbsbytype.length; i ++) {erbsbyType [i] = novo hashset <erb> ();} para (erva h: jardim) {erbsbytype [h.type.ordinal (). System.out.printf ("%s:%s%n", herb.type.values () [i], erbsbytype [i]);}Esse método é realmente viável, mas oculta muitos problemas. Porque as matrizes não são compatíveis com genéricos. O programa precisa executar conversões sem controle e não pode ser compilado corretamente. Como a matriz não sabe o que seu índice representa, você deve rotular manualmente a saída desses índices. Mas o problema mais sério com esse método é que, quando você acessa uma matriz indexada pelo número ordinal enum, é sua responsabilidade usar o valor int correto; INT não pode fornecer segurança de tipo para enumes. Se você usar o valor errado, o programa concluirá silenciosamente o trabalho errado ou, se tiver sorte, ele lançará uma exceção de ArrayIndexoutOfBoundException .
java.util.enummap é uma implementação de mapa muito rápida que é usada especificamente para enumeração.
// Usando um enummap para associar dados a um enummap <herb.type, set <rade>> erbsbytype = new Enummap <herb.type, set <rade>> (herb.type.class); para (Herb.Type t: Herb.Type.Values) Herbsbytype.put (T, New Hashset <Herb> ()); para (Herb H: Garden) HerbsbyType.get (H.Type) .Add (H); System.out.println (HerbsbyType);
Este programa é mais curto, mais claro e seguro e pode ser executado a uma velocidade comparável à dos programas que usam números ordinais. Não tem conversões inseguras; Ele não precisa rotular a saída desses índices manualmente, porque as teclas de mapeamento sabem como se traduzir em uma enumeração de strings imprimíveis; Também é impossível cometer erros ao calcular índices de matriz . A razão pela qual o enummap é comparável às matrizes indexadas através de índices ordinais em termos de velocidade de execução é que o Enummap usa essa matriz internamente. Mas oculta esse tipo de detalhe de pensamento dos programadores, combinando a rica funcionalidade da segurança do mapa e do tipo com a velocidade das matrizes. Observe que o construtor Enummap usa um objeto de classe de tipo de chave: este é um token de tipo limitado que fornece informações genéricas de tempo de execução.
Resumir
O exposto acima é toda a explicação detalhada do enummap em vez do código de índice ordinal em Java. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!