在 Java 中获取映射 (HashMap) 的枚举(用于键)?
据我了解,似乎没有直接的方法可以直接获取 HashMap
的键的 Enumeration
。我只能得到一个keySet()
。从该 Set
中,我可以获得一个 Iterator
,但 Iterator
似乎与 Enumeration
不同。
从 HashMap
的键直接获取 Enumeration
的最佳且最高效的方法是什么?
背景:我正在实现我自己的 ResourceBundle (=>getKeys()
方法),我必须提供/实现一个返回所有键的枚举的方法。但我的实现基于 HashMap,因此我需要以某种方式找出如何在这两种“迭代器/枚举器”技术之间进行最佳转换。
As far as I understand this, it seems that there is not a direct way of getting an Enumeration
directly for the Keys of a HashMap
. I can only get a keySet()
. From that Set
, I can get an Iterator
but an Iterator
seems to be something different than an Enumeration
.
What is the best and most performant way to directly get an Enumeration
from the Keys of a HashMap
?
Background: I am implementing my own ResourceBundle (=>getKeys()
Method), and I have to provide/implement a method that returns the Enumeration of all Keys. But my implementation is based on a HashMap
so I need to somehow figure out how to best convert betweens these two "Iterator/Enumerator" techniques.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为您可以使用 java.util.Collections 类中的方法 enumeration 来实现您想要的。
枚举方法的 API 文档是这样说的:
public static Enumeration枚举(Collection c)
返回指定集合的枚举。这提供了与需要枚举作为输入的旧 API 的互操作性。
例如,下面的代码片段从 HashMap 的键集中获取 Enumeration 的实例
,结果输出为:
一个
两个
三
I think you can use the method enumeration from java.util.Collections class to achieve what you want.
The API doc of the method enumerate has this to say:
public static Enumeration enumeration(Collection c)
Returns an enumeration over the specified collection. This provides interoperability with legacy APIs that require an enumeration as input.
For example, the below code snippet gets an instance of Enumeration from the keyset of HashMap
and resulting the output is:
one
two
three
Apache commons-collections 有一个适配器,使
Iterator
可供使用,例如一个枚举
。看看 IteratorEnumeration。因此,简而言之,您执行以下操作:
或者,如果您(由于某种原因)不想包含公共集合,您可以自己实现此适配器。这很简单 - 只需实现
Enumeration
,在构造函数中传递Iterator
,并且每当hasMoreElements()
和nextElement( )
被调用时,您可以在底层Iterator
上调用hasNext()
和next()
。如果某些 API 合约强制您使用
Enumeration
(正如我假设的情况),请使用此选项。否则使用Iterator
- 这是推荐的选项。Apache commons-collections have an adapter that makes the
Iterator
available for use like anEnumeration
. Take a look at IteratorEnumeration.So in short you do the following:
Alternatively, if you (for some reason) don't want to include commons-collections, you can implement this adapter yourself. It is easy - just make an implementation of
Enumeration
, pass theIterator
in a constructor, and wheneverhasMoreElements()
andnextElement()
are called, you call thehasNext()
andnext()
on the underlyingIterator
.Use this if you are forced to use
Enumeration
by some API contract (as I assume the case is). Otherwise useIterator
- it is the recommended option.你可以编写一个适配器来适应Enumeration。
然后你可以使用这个自定义枚举:)
You can write a adapter to adapt to Enumeration.
And then you can use this custom enumeration :)