Java: Enumeration from Set<String>

JavaCollectionsSetEnumeration

Java Problem Overview


I have a simple collections question. I have a Set<String> object. I want an Enumeration<String> of the Strings in that Set. I need an Enumeration<String> since I am overriding a method that specifically returns an Enumeration<String>. What is the cleanest/best way to go about it?

Java Solutions


Solution 1 - Java

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.

Solution 2 - Java

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

Solution 3 - Java

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionwell actuallyView Question on Stackoverflow
Solution 1 - JavaKevin BourrillionView Answer on Stackoverflow
Solution 2 - JavaJon SkeetView Answer on Stackoverflow
Solution 3 - JavaAdamskiView Answer on Stackoverflow