Java:Set <String>中的枚举

wel*_*lly 49 java collections enumeration set

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

Kev*_*ion 195

java.util.Collections.enumeration(set)

的Javadoc

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

  • 好吧,我知道我的答案很简洁,但那是因为这就是真正需要说的.:)这个方法在JDK中并且*正好*海报要求的内容.我很奇怪它会排在最后. (10认同)

Jon*_*eet 27

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


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

Enumeration<String> x = new Vector(set).elements();
Run Code Online (Sandbox Code Playgroud)

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Snekse:如果以前的投票者这么说,那将很有帮助。我不能删除我的答案,因为它已经被接受了,但是我可以指出凯文的答案。 (2认同)
  • @Snekse:由于它已经在JDK中,因此我不会被低估。我只是反对没有评论的不赞成投票。 (2认同)

Ada*_*ski 5

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

Set<String> strs = ...

for (String s : strs) {
 ...
}
Run Code Online (Sandbox Code Playgroud)

如果你真的需要一个,Enumeration你可以实现一个适配器类来包装Iterator返回的调用iterator().Apache Collections库中有一个适配器类:IteratorEnumeration.

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

Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
Run Code Online (Sandbox Code Playgroud)