在Java中获取Map(HashMap)的枚举(用于键)?

2022-09-02 00:08:32

据我所知,似乎没有直接的方法可以直接获得一个.我只能得到一个.由此,我可以得到一个,但一个似乎与.EnumerationHashMapkeySet()SetIteratorIteratorEnumeration

从密钥直接获取的最佳和最有效的方法是什么?EnumerationHashMap

背景:我正在实现我自己的 ResourceBundle(=> 方法),我必须提供/实现一个返回所有键枚举的方法。但是我的实现是基于的,所以我需要以某种方式弄清楚如何最好地在这两种“迭代器/枚举器”技术之间进行转换。getKeys()HashMap


答案 1

我认为你可以使用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());
 }

得到的输出是:



答案 2

Apache commons-collections有一个适配器,可以像.看看迭代器枚举IteratorEnumeration

使迭代器实例显示为枚举实例的适配器

简而言之,您执行以下操作:

Enumeration enumeration = new IteratorEnumeration(hashMap.keySet().iterator());

或者,如果您(出于某种原因)不想包含共享资源集合,则可以自己实现此适配器。这很容易 - 只需在构造函数中传递 ,并且无论何时调用和调用,您都可以在底层调用 and。EnumerationIteratorhasMoreElements()nextElement()hasNext()next()Iterator

如果您被某些API合约强制使用,请使用此选项(我假设情况确实如此)。否则使用 - 这是推荐的选项。EnumerationIterator


推荐