Насколько я понимаю это, кажется, что нет прямого способа добраться Enumeration
непосредственно для Ключей a HashMap
. Я могу только получить a keySet()
. От этого Set
, Я могу добраться Iterator
но Iterator
кажется, что-то другое, чем Enumeration
.
Что является лучшим и большая часть производительного способа непосредственно добраться Enumeration
от Ключей a HashMap
?
Фон: Я реализую свой собственный ResourceBundle (=>getKeys()
Метод), и я должен обеспечить/реализовать метод, который возвращает Перечисление всех Ключей. Но моя реализация основана на a HashMap
таким образом, я должен так или иначе выяснить, как лучше всего преобразовать betweens эти два метода "Итератора/Перечислителя".
Apache Commons-Collections имеют адаптер, который делает ITERATOR
, доступный для использования, такой как перечисление
. Посмотрите на итераторность .
Адаптер для внесения экземпляра итератора, по-видимому, кажется, что экземпляры перечисления
, так что короче говоря следующие:
Enumeration enumeration = new IteratorEnumeration(hashMap.keySet().iterator());
в качестве альтернативы, если вы (по какой-то причине) не хотите включать коллекции Commons, вы можете Реализуйте этот адаптер самостоятельно. Легко - просто внести реализацию перечисления
, проходят итератор
в конструкторе, и всякий раз, когда оформлены ()
и NextElement ()
называются, вы называете HASNEXT ()
и следующий ()
на основе лечения итератора
.
Используйте это, если вы вынуждены использовать перечисление
некоторым договором API (поскольку я предполагаю, что случай). В противном случае используйте итератор
- это рекомендуемая опция.
Я думаю, что вы можете использовать метод Перечисление из java.util.collections класс для достижения того, что вы хотите.
Документ API метода, перечисляя это:
Общественное средство перечисления (сбора C)
возвращает перечисление в течение указанного коллекции. Это обеспечивает взаимодействие с устаревшими API, которые требуют перечисления в качестве ввода.
Например, фрагмент следующего кода приведен экземпляр перечисления от ключей HASHMAP
final Map <String,Integer> test = new HashMap<String,Integer>();
test.put("one",1);
test.put("two",2);
test.put("three",3);
final Enumeration<String> strEnum = Collections.enumeration(test.keySet());
while(strEnum.hasMoreElements()) {
System.out.println(strEnum.nextElement());
}
и приводит к выводу:
один
два
три