据我所知,似乎没有直接获得一个Enumeration关键字的直接方法HashMap.我只能得到一个keySet().从那以后Set,我可以得到一个,Iterator但Iterator似乎是一个不同的东西Enumeration.
什么是最好和最高效的方式直接从一个Enumeration关键的HashMap?
背景:我正在实现自己的ResourceBundle(=> getKeys()Method),我必须提供/实现一个返回所有Keys的Enumeration的方法.但我的实现是基于一个HashMap所以我需要以某种方式弄清楚如何最好地转换这两个"迭代器/枚举器"技术.
sat*_*esh 42
我想你可以使用的方法枚举从java.util.Collections中的类来实现你想要什么.
方法枚举的API doc有这样的说法:
public static Enumeration enumeration(Collection c)
返回指定collection的枚举.这提供了与需要枚举作为输入的旧API的互操作性.
例如,下面的代码片段从HashMap的键集中获取Enumeration的实例
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());
}
Run Code Online (Sandbox Code Playgroud)
和产生的输出是:
一个
2
3
Boz*_*zho 21
Apache commons-collections有一个适配器,可以Iterator像使用一样使用Enumeration.看看IteratorEnumeration.
用于创建Iterator实例的适配器似乎是Enumeration实例
简而言之,您可以执行以下操作:
Enumeration enumeration = new IteratorEnumeration(hashMap.keySet().iterator());
Run Code Online (Sandbox Code Playgroud)
或者,如果您(由于某种原因)不想包含commons-collections,则可以自己实现此适配器.这是很容易-只是做的实现Enumeration,通过Iterator在构造函数中,每当hasMoreElements()和nextElement()被调用,调用hasNext()和next()对底层Iterator.
如果您被Enumeration某些API合同强制使用(我认为是这样),请使用此选项.否则使用Iterator- 这是推荐的选项.