Java

Java HashSet

In Java, a HashSet is a set. While a set would be a set of integers, or of floats or of strings, etc., the HashSet would be a set of pairs. In Java proper, a pair is a map-entry which can be created independently of the destination map-like data structure. A map-entry or pair is code with a key and its corresponding value. The key is actually hashed into an array index for the value.

The following is an example data of key/value pairs where a key is a fruit name and the corresponding value is the outer color of the fruit:

passion fruit => purple

watermelon => green

peach => dark yellow

papaya => orange

mango => yellow

This article provides basic knowledge of Java HashSet, beginning with the creation of a pair (map entry).

Creating a Map-Entry

A syntax to create a map-entry (pair) is:

public SimpleEntry(K key, V value)

This is of the AbstractMap.SimpleEntry<K,V> class, of the package, java.util.* , which has to be imported. K is the type of key, which in this case, is a String. V is the type of value, which in this case, is still a string.

The following code segment creates five pairs:

AbstractMap.SimpleEntry<String, String> pair1 = new AbstractMap.SimpleEntry<String, String>("passion fruit", "purple");

AbstractMap.SimpleEntry<String, String> pair2 = new AbstractMap.SimpleEntry<String, String>("watermelon", "green");

AbstractMap.SimpleEntry<String, String> pair3 = new AbstractMap.SimpleEntry<String, String>("peach", "dark yellow");

AbstractMap.SimpleEntry<String, String> pair4 = new AbstractMap.SimpleEntry<String, String>("papaya", "orange");

AbstractMap.SimpleEntry<String, String> pair5 = new AbstractMap.SimpleEntry<String, String>("mango", "yellow");

These five pairs can form five elements of a HashSet.

Constructing a HashSet

There are four overloaded constructors for the HashSet, but only two are illustrated in this article.

public HashSet()

This creates an empty HashSet. An empty HashSet for the above pairs can be created as follows:

HashSet<AbstractMap.SimpleEntry<String, String>> hs = new HashSet<AbstractMap.SimpleEntry<String, String>>();

public HashSet(Collection<? extends E> c)

This takes another HashSet as argument to create a new HashSet. An example code statement of a HashSet created from another HashSet is:

HashSet<AbstractMap.SimpleEntry<String, String>> hsB = new HashSet<AbstractMap.SimpleEntry<String, String>>(hs);

where hs is an already created HashSet.

The HashSet class is also in the java.util.* package, which should be imported.

Methods of the HashSet

Commonly used methods of the HashSet class are explained in this section.

public boolean add(E e)

This adds a new pair (element) to the HashSet. It returns true if this set did not already contain the specified element; false otherwise. The following code segment adds the above five elements (pairs) to the HashSet, hs:

HashSet<AbstractMap.SimpleEntry<String, String>> hs = new HashSet<AbstractMap.SimpleEntry<String, String>>();

hs.add(pair1); hs.add(pair2); hs.add(pair3); hs.add(pair4); hs.add(pair5);

public int size()

This returns the number of pairs (elements) in the set. Example:

int sz = hs.size();

System.out.println(sz);

For this code, the return value would be 5.

public Iterator<E> iterator()

An iterator is an object that can be used to access all the elements of a set (or list), one-by-one. The following statement returns an iterator from of the above HashSet:

Iterator<AbstractMap.SimpleEntry<String, String>> iter = hs.iterator();

The iterator has the method,

E next()

This method of the iterator returns the next element beginning from the first, in the set (or list). The elements returned are not necessarily in the order in which they were added. To return the next element of the above HashSet, the following statement can be used:

AbstractMap.SimpleEntry<String, String> pair = iter.next();

On the left of the assignment operator, is a programmer decided name for a pair (map-entry), pair, preceded by the type of pair. On the right, is the iterator, obtained above, followed by the method, next(). After returning the pair, the methods of the list can then be used to handle the pair.

The class AbstractMap.SimpleEntry<K,V>, for the pair, has the method, toString(). This method returns both the key and the value in string form. The following code segment, prints all the key/value pairs of the above HashSet using the iterator:

for (int i=0; i<hs.size(); i++) {

    AbstractMap.SimpleEntry<String, String> pair = iter.next();

    System.out.println(pair.toString());

}

The output is:

papaya=orange

peach=dark yellow

mango=yellow

watermelon=green

passion fruit=purple

The method separates the key from the value with =.

public boolean remove(Object o)

This removes an element (pair) that the programmer already knows, should be present, in the HashSet. It returns true, if a change took place; and false otherwise. Both the iteration and the HashSet classes have this method (slightly differently). The following code segment accesses all the elements in the HashSet and removes “watermelon=green”.

for (int i=0; i<hs.size(); i++) {

    AbstractMap.SimpleEntry<String, String> pair = iter.next();

    String str = pair.toString();

    if (str.equals("watermelon=green"))

        iter.remove();

}

System.out.println(hs.size());

The output is 4. The remove() method of the iterator and not that of the HashSet has been used. The pair (element) the iterator was pointing to has been removed.

public void clear()

This removes all the elements from the HashSet. The following code segment illustrates this:

hs.clear();

System.out.println(hs.size());

The output is 0.

public boolean isEmpty()

Returns true, if the HashSet contains no element, and false otherwise. The following code illustrates this for a non-empty set:

boolean bl = hs.isEmpty();

System.out.println(bl);

The output is false.

boolean contains(Object o)

This returns true, if the HashSet contains the indicated element (pair); and false otherwise. The following code segment illustrates this for a HashSet that already has elements:

AbstractMap.SimpleEntry<String, String> pairC = new AbstractMap.SimpleEntry<String, String>("peach", "dark yellow");

boolean bl = hs.contains(pairC);

System.out.println(bl);

For the above HashSet, the output is true.

Conclusion

The HashSet in Java, is a set. However, it differs from a normal set, in that, its elements are expected to be pairs. A pair is an element code, which has a key and its corresponding value. The key is hashed to an array index for the value. The following statement would create an empty HashSet:

HashSet<AbstractMap.SimpleEntry<String, String>> hs = new HashSet<AbstractMap.SimpleEntry<String, String>>();

hs is the name of the HashSet.

In Java proper, a pair is a map-entry. The following statement would create a map-entry:

AbstractMap.SimpleEntry<String, String> pair1 = new AbstractMap.SimpleEntry<String, String>("passion fruit", "purple");

The type of key here is a string, and the type of value here, is also a string.

The Java HashSet class has some useful methods that have been explained above.

About the author

Chrysanthus Forcha

Discoverer of mathematics Integration from First Principles and related series. Master’s Degree in Technical Education, specializing in Electronics and Computer Software. BSc Electronics. I also have knowledge and experience at the Master’s level in Computing and Telecommunications. Out of 20,000 writers, I was the 37th best writer at devarticles.com. I have been working in these fields for more than 10 years.