Tech and Media Labs
This site uses cookies to improve the user experience.

Generic Set in Java

Jakob Jenkov
Last update: 2014-06-23

Java's Set interface (java.util.Set) can be generified. In other words, instances of Set can be given a type, so only instances of that type can be inserted and read from that Set. Here is an example:

Set<String> set = new HashSet<String>;

This set is now targeted at only String instances, meaning only String instances can be put into this set. If you try to put something else into this Set, the compiler will complain.

The generic type checks only exists at compile time. At runtime it is possible to tweak your code so that a String Set has other objects that String's inserted. This is a bad idea, though.

Adding Elements to a Generic Set

Adding elements to a generic Set is done using the add() method, just like you have always done:

Set<String> set = new HashSet<String>;

String string1 = "a string";

So what is the big difference? Well, if you try to add an element that is not a String instance, to the Set in the example above, the compiler will complain. That's a pretty nice extra type check to have.

Iterating a Generic Set

You can iterate a generic Set using an iterator, like this:

Set<String> set = new HashSet<String>;
Iterator<String> iterator = set.iterator();

  String aString =;

Notice how it is not necessary to cast the object returned from the next call. Because the Set is generified (has a type), the compiler knows that it contains String instances. Therefore it is not necessary to cast the objects obtained from it, even if it comes from its Iterator.

You can also use the new for-loop, like this:

Set<String> set = new HashSet<String>;

for(String aString : set) {

Notice how a String variable is declared inside the parantheses of the for-loop. For each iteration (each element in the Set) this variable contains the current element (current String).

Jakob Jenkov

Copyright  Jenkov Aps
Close TOC