繁体   English   中英

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

[英]Get an Enumeration (for the Keys) of a Map (HashMap) in Java?

据我所知,似乎没有直接获取HashMap的键的Enumeration的直接方法。 我只能得到一个keySet() 从那个Set ,我可以得到一个Iterator但是Iterator似乎与Enumeration不同。

HashMap的键直接获取Enumeration的最佳和最HashMap什么?

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

from java.util.Collections class to achieve what you want. 我想你可以使用java.util.Collections类中的方法来实现你想要的。

方法枚举的API doc有这样的说法:

例如,下面的代码片段从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());
 }

结果输出是:


Apache commons-collections有一个适配器,使Iterator可以像Enumeration一样使用。 看看IteratorEnumeration

用于创建Iterator实例的适配器似乎是Enumeration实例

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

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

或者,如果您(由于某种原因)不想包含commons-collections,则可以自己实现此适配器。 这很简单 - 只需要实现Enumeration ,在构造函数中传递Iterator ,并且每当调用hasMoreElements()nextElement() ,就可以在底层Iterator上调用hasNext()next()

如果您被某些API合同强制使用Enumeration ,则使用此方法(我假设是这样)。 否则使用Iterator - 这是推荐的选项。

您可以编写适配器以适应Enumeration。

    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();
        }

    }

然后你可以使用这个自定义枚举:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM