Основным исследованием в этой статье является соответствующее содержание EnummAP вместо порядкового индекса в Java, которое представлено следующим образом.
Примечания исследования "Эффективное китайское издание Java 2"
Он часто встречается с использованием порядкового метода Enum для индекса ENUM.
открытый класс herb {public enum type {Годовой, многолетний, биеннал}; частное имя финальной строки; частный финальный тип типа; Herb (string name, type type) {this.name = name; this.type = type; } @Override public String toString () {return name; }}Теперь предположим, что в саду, которые вы хотите организовать, существует множество трав, которые вы хотите организовать (ежегодно, многолетнее или разбитое), прежде чем перечислять эти растения. Если вы хотите сделать это, вам нужно построить три комплекта, по одному для каждого типа, и вытекать по всему саду и поместить каждую траву в соответствующий набор. Некоторые программисты делают это, поместив эти наборы в массив, индексируемый по порядковым номерам типов.
// Использование ordinal () для индексации массива - не делай это [] Garden = ...; // Индексируется herb.type.ordinal () set <herb> [] herbsbytype = (set <herb> []) Новый набор [herb.type.values (). Length]; for (int i = 0; i <herbsbytype.length; i ++) {herbsbytype [i] = новый хэшсет <herb> ();} для (herb h: garde) {herbsbytype [h.type.ordinal ()]. Добавить (h);} // print refference (int i = 0; System.out.printf ("%s:%s%n", herb.type.values () [i], herbsbytype [i]);}Этот метод действительно возможен, но он скрывает много проблем. Потому что массивы не совместимы с дженериками. Программа должна выполнять неконтролируемые преобразования и не может быть собрана правильно. Поскольку массив не знает, что представляет его индекс, вы должны вручную пометить выходные данные этих индексов. Но самая серьезная проблема с этим методом заключается в том, что когда вы получаете доступ к массиву, индексированному по порядковому номеру перечисления, вы несете ответственность за использование правильного значения Int; int не может обеспечить безопасность типа для перечисления. Если вы используете неправильную ценность, программа тихо завершит неправильную работу, или если вам повезет, она бросит исключение ArrayIndexoutOfBoundException .
java.util.enummap - очень быстрая реализация карты, которая специально используется для перечисления.
// Использование Enummap для связывания данных с enummap <herb.type, set <herb >> herbsbytype = new enummap <herb.type, set <herb >> (herb.type.class); для (herb.type t: herb.type.values) herbsbytype.put (t, новый хэшсет <herb> ()); для (трава H: сад) herbsbytype.get (h.type) .add (h); System.out.println (Herbsbytype);
Эта программа короче, более ясна и безопаснее, и может работать со скоростью, сопоставимой с программами, которые используют порядковые номера. У него нет небезопасных преобразований; Он не должен маркировать вывод этих индексов вручную, потому что клавиши сопоставления знают, как перевести себя в перечисление печатных струн; Также невозможно совершать ошибки при расчете индексов массива . Причина, по которой Enummap сравнима с массивами, индексированными с помощью порядковых индексов с точки зрения скорости работы, заключается в том, что Enummap использует этот массив внутри. Но он скрывает такого рода мыслительную деталь от программистов, объединяя богатую функциональность безопасности карты и типа со скоростью массивов. Обратите внимание, что конструктор Enummap использует объект класса клавиш: это токен с ограниченным типом, который предоставляет общую информацию времени выполнения.
Суммировать
Выше приведено подробное объяснение enummap вместо кода порядкового индекса в Java. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!