Java: Enumeration from Set<String>

蓝咒 提交于 2019-11-30 16:47:01

EDIT: There's no need to write your own (although I'll leave the implementation below for posterity) - see Kevin Bourrillion's answer for the one in the JDK.


If you really need an enumeration, could could use:

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

It would be better to use Iterable<E> if at all possible though...

A better alternative is to write a small wrapper class around Iterator<E>. That way you don't have to take a copy just to find an imlementation of 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());
    }
}
Kevin Bourrillion

java.util.Collections.enumeration(set)

Javadoc

Returns an enumeration over the specified collection. This provides interoperability with legacy APIs that require an enumeration as input.

Assuming you mean enumeration in the mathematical sense the cleanest way to do this is via a for-loop, applicable to any class that implements Iterable:

Set<String> strs = ...

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

If you really require an Enumeration you could implement an adapter class to wrap the Iterator returned by calling iterator(). There is an adapter class in the Apache Collections library: IteratorEnumeration.

Or you could use Google's Guava library:

Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!