获取Java中映射(HashMap)的枚举(用于键)?
据我所知,似乎没有一种直接的方法可以直接为获取Java中映射(HashMap)的枚举(用于键)?,java,enumeration,Java,Enumeration,据我所知,似乎没有一种直接的方法可以直接为HashMap的键获取枚举。我只能得到一个keySet()。从集合,我可以得到一个迭代器,但是迭代器似乎与枚举不同 从HashMap的键直接获取枚举的最佳和最有效的方法是什么 背景:我正在实现我自己的(=>getKeys()Method),我必须提供/实现一个返回所有键枚举的方法。但是我的实现是基于一个HashMap,所以我需要找出如何在这两种“迭代器/枚举器”技术之间进行最佳转换。有一个适配器,使迭代器可以像枚举一样使用。看一看 使迭代器实例显示为枚举
HashMap
的键获取枚举。我只能得到一个keySet()
。从集合
,我可以得到一个迭代器
,但是迭代器
似乎与枚举
不同
从HashMap
的键直接获取枚举
的最佳和最有效的方法是什么
背景:我正在实现我自己的(=>getKeys()
Method),我必须提供/实现一个返回所有键枚举的方法。但是我的实现是基于一个HashMap
,所以我需要找出如何在这两种“迭代器/枚举器”技术之间进行最佳转换。有一个适配器,使迭代器可以像枚举
一样使用。看一看
使迭代器实例显示为枚举实例的适配器
因此,简而言之,您可以执行以下操作:
Enumeration enumeration = new IteratorEnumeration(hashMap.keySet().iterator());
或者,如果您(出于某种原因)不想包含commons集合,您可以自己实现这个适配器。这很简单-只需实现枚举
,在构造函数中传递迭代器
,并且每当调用hasMoreElements()
和NextElements()
时,就在底层迭代器上调用hasNext()
和next()
如果某个API契约(我假设是这样)强迫您使用枚举
,请使用此选项。否则请使用迭代器,这是推荐的选项。我认为您可以使用java.util.Collections类中的方法枚举来实现所需的功能
enumerate方法的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());
}
final Map test=new HashMap();
测试。放置(“一”,1);
测试。放置(“两”,2);
测试。放置(“三”,3);
最终枚举强度=Collections.Enumeration(test.keySet());
while(strengum.hasMoreElements()){
System.out.println(strengum.nextElement());
}
结果输出为:
一个
两个
三个您可以编写一个适配器以适应枚举
public class MyEnumeration implements Enumeration {
private Iterator iterator;
public MyEnumeration(Iterator iterator){
this.iterator = iterator;
}
public MyEnumeration(Map map) {
iterator = map.keySet().iterator();
}
@Override
public boolean hasMoreElements() {
return iterator.hasNext();
}
@Override
public Object nextElement() {
return iterator.next();
}
}
然后您可以使用这个自定义枚举:)您有什么理由需要枚举而不是迭代器吗?Enumeration的Javadoc建议您改用Iterator。好吧,我正在实现的类需要一个枚举:(请参见此处的getKey()方法)我唯一能做的就是实现它,完全不同,而不使用HashMap。尽管如此,我还是非常有兴趣了解获取地图键枚举的最佳和最有效的方法。谢谢Google Collections还使用迭代器支持此操作。asEnumerator()
:hello Bozho。谢谢,特别有趣的是你对如何在我自己身上实现这一点的评论。到目前为止,我还没有意识到我自己可以做到这一点。+1这是一条路,只要你从收藏开始。无需编写自己的适配器来枚举密钥集。