La principale recherche de cet article est le contenu pertinent de l'Énumap au lieu de l'indice ordinal en Java, qui est introduit comme suit.
Notes d'étude "Efficace Java Chinese Edition 2"
Il est souvent rencontré en utilisant la méthode ordinale d'Enum pour indexer les types d'énumération.
classe publique Herb {Type d'énumération publique {annuel, vivace, biennal}; Nom de la chaîne finale privée; type de type final privé; Herb (nom de chaîne, type type) {this.name = name; this.type = type; } @Override public String toString () {Nom de retour; }}Supposons maintenant qu'il existe un éventail d'herbes représentant des plantes dans un jardin que vous souhaitez organiser par type (annuel, vivace ou biennal) avant d'énumérer ces plantes. Si vous voulez le faire, vous devez construire trois ensembles, un pour chaque type, et itérer dans tout le jardin et placer chaque herbe dans l'ensemble correspondant. Certains programmeurs le font en mettant ces ensembles dans un tableau indexé par des nombres ordinaux de types.
// Utilisation d'Ordinal () pour indexer un tableau - Ne faites pas thisHerb [] jardin = ...; // indexé par herb.type.ordinal () set <Herb> [] HerbsByType = (set <herb> []) nouvel ensemble [herb.type.values (). Le long]; pour (int i = 0; i <herbsbyType.length; i ++) {HerbsbyType [i] = new Hashset <Herb> ();} pour (Herb H: Garden) {HerbsbyType [H.Type.ORDINAL ()]. Add (H);} // imprimez les résultats (int i = 0; i <Herbsbytype.Length; System.out.printf ("% s:% s% n", herb.type.values () [i], HerbsbyType [i]);}Cette méthode est en effet possible, mais elle cache de nombreux problèmes. Parce que les tableaux ne sont pas compatibles avec les génériques. Le programme doit effectuer des conversions non contrôlées et ne peut pas être compilée correctement. Parce que le tableau ne sait pas ce que représente son index, vous devez étiqueter manuellement la sortie de ces index. Mais le problème le plus grave avec cette méthode est que lorsque vous accédez à un tableau indexé par le numéro ordinal Enum, il est de votre responsabilité d'utiliser la bonne valeur int; INT ne peut pas assurer la sécurité de type pour les énumérations. Si vous utilisez la mauvaise valeur, le programme terminera tranquillement le mauvais travail, ou si vous avez de la chance, il lèvera une exception ArrayIndexoutofBoundException .
Java.util.Enummap est une implémentation de carte très rapide qui est spécifiquement utilisée pour l'énumération.
// Utilisation d'un énumap pour associer des données à un énumap <Herb.type, set <Herb>> HerbsbyType = new Enummap <Herb.type, set <Herb>> (herb.type.class); pour (herb.type t: herb.type.values) HerbsbyType.put (t, new hashset <Herb> ()); pour (Herb H: Garden) HerbsbyType.get (H.Type) .Add (H); System.out.println (HerbsbyType);
Ce programme est plus court, plus clair et plus sûr, et peut fonctionner à une vitesse comparable à celle des programmes qui utilisent des nombres ordinaux. Il n'a pas de conversions dangereuses; Il n'a pas à étiqueter manuellement la sortie de ces index, car les touches de mappage savent comment se traduire dans une énumération de chaînes imprimables; Il est également impossible de faire des erreurs lors du calcul des index de tableau . La raison pour laquelle Enuummap est comparable aux tableaux indexés via des index ordinaux en termes de vitesse d'exécution est qu'Enummap utilise ce tableau en interne. Mais il cache ce type de détail de la pensée des programmeurs, combinant la riche fonctionnalité de la sécurité et de la sécurité des types avec la vitesse des tableaux. Notez que le constructeur Enuummap utilise un objet de classe de type de clé: il s'agit d'un jeton de type limité qui fournit des informations génériques d'exécution.
Résumer
Ce qui précède est toute l'explication détaillée de Enuummap au lieu du code d'index ordinal en Java. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!