Java:Set <string> </string>中的枚举

时间:2011-08-16 22:43:43

标签: java collections set enumeration

我有一个简单的收藏问题。我有一个Set<String>对象。我想要枚举该集合中的字符串。什么是最干净/最好的方法呢?

3 个答案:

答案 0 :(得分:192)

java.util.Collections.enumeration(set)

<强>的Javadoc

  

返回指定集合的​​枚举。这提供了   与需要枚举的旧API的互操作性   输入

答案 1 :(得分:27)

编辑:没有必要自己编写(虽然我将下面的实现留给子孙后代) - 请参阅Kevin Bourrillion对JDK中答案的回答。


如果真的需要枚举,可以使用:

Enumeration<String> x = new Vector(set).elements();

如果尽可能使用Iterable<E>会更好......

更好的选择是在Iterator<E>周围编写一个小包装类。这样你就不必复制只是为了找到Enumeration<E>的遗产:

import java.util.*;

class IteratorEnumeration<E> implements Enumeration<E>
{
    private final Iterator<E> iterator;

    public IteratorEnumeration(Iterator<E> iterator)
    {
        this.iterator = iterator;
    }

    public E nextElement() {
        return iterator.next();
    }

    public boolean hasMoreElements() {
        return iterator.hasNext();
    }

}


public class Test {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>(); 
        Enumeration<String> x = new IteratorEnumeration<String>(set.iterator());
    }
}

答案 2 :(得分:5)

假设你的意思是数学意义上的枚举,最简洁的方法是通过for循环,适用于任何实现Iterable的类:

Set<String> strs = ...

for (String s : strs) {
 ...
}

如果您确实需要Enumeration,则可以通过调用Iterator来实现一个适配器类来包装返回的iterator()。 Apache Collections库中有一个适配器类:IteratorEnumeration

或者您可以使用Google的Guava库:

Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());