java.util.LinkedHashSet Example
In this post, we are going to discuss about the class java.util.LinkedHashSet
and give you an idea of how you can use it on your own code when you want to manage collections of objects.
Applications often must manage collections of objects. Although you can use arrays for this purpose, they are not always a good choice. For example, arrays have fixed sizes, making it tricky to determine an optimal size when you need to store a variable number of objects. Also, arrays can be indexed by integers only, which make them unsuitable for mapping arbitrary objects to other objects. Java’s standard class library provides the Collections Framework and legacy APIs to manage collections on behalf of applications.
1. LinkedHashSet Class
LinkedHashSet
is a subclass of HashSet
that uses a linked list to store its elements. As a result, LinkedHashSet
’s iterator returns elements in the order in which they were inserted. The HashSet
class provides a set implementation that is backed by a hashtable data structure (implemented as a HashMap
which provides a quick way to determine if an element has already been stored in this structure). HashSet
permits the null reference to be stored in its instances.
2. Executing some code
Suppose you want to add instances of your classes to a hashset. Your classes must override equals()
and hashCode()
; otherwise, duplicate class instances can be stored in the hashset.
Planet.java
package com.javacodegeeks.examples.linkedhashset.beans; public class Planet { private String name; private int positionFromTheSun; public Planet() {} public Planet(String name, int positionFromTheSun) { this.name = name; this.positionFromTheSun = positionFromTheSun; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPositionFromTheSun() { return positionFromTheSun; } public void setPositionFromTheSun(int positionFromTheSun) { this.positionFromTheSun = positionFromTheSun; } @Override public String toString() { return "Planet [name = " + name + ", positionFromTheSun = " + positionFromTheSun + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + positionFromTheSun; return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } Planet other = (Planet) obj; if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } if (positionFromTheSun != other.positionFromTheSun) { return false; } return true; } }
App.java
package com.javacodegeeks.examples.linkedhashset; //~--- non-JDK imports -------------------------------------------------------- import com.javacodegeeks.examples.linkedhashset.beans.Planet; //~--- JDK imports ------------------------------------------------------------ import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; public class App { public static void main(String[] args) { Set<Planetgt; planets = new LinkedHashSet<>(); planets.add(new Planet("Mercurio", 1)); planets.add(new Planet("Saturno", 6)); // Try to add the same object twice planets.add(new Planet("Mercurio", 1)); planets.add(new Planet("Venus", 2)); planets.add(new Planet("Tierra", 3)); planets.add(new Planet("Marte", 4)); planets.add(new Planet("Jupiter", 5)); planets.add(new Planet("Urano", 7)); // Try to add the same object twice planets.add(new Planet("Marte", 4)); planets.add(new Planet("Pluton", 9)); // Try to add the same object twice planets.add(new Planet("Urano", 7)); planets.add(new Planet("Neptuno", 8)); System.out.println("Number of planets: " + planets.size()); if (!planets.isEmpty()) { Iterator it = planets.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } planets.remove(new Planet("Pluton", 9)); planets.add(null); System.out.println(""); if (!planets.isEmpty()) { Iterator it = planets.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } } }
Let’s explain the methods used in the previous code
public boolean add(E e)
– Adds the specified element to this set if it is not already present. More formally, adds the specified element e to this set if this set contains no element e2 such that (e==null ? e2==null : e.equals(e2)). If this set already contains the element, the call leaves the set unchanged and returns false.public int size()
– Returns the number of elements in this set (its cardinality).public boolean isEmpty()
– Returns true if this set contains no elements.public Iterator<E> iterator()
– Returns an iterator over the elements in this set.public boolean remove(Object o)
– Removes the specified element from this set if it is present. More formally, removes an element e such that (o==null ? e==null : o.equals(e)), if this set contains such an element.
The output of the command
com.javacodegeeks.examples.linkedhashset.App
should be similar to:
Number of planets: 9 Planet [name = Mercurio, positionFromTheSun = 1] Planet [name = Saturno, positionFromTheSun = 6] Planet [name = Venus, positionFromTheSun = 2] Planet [name = Tierra, positionFromTheSun = 3] Planet [name = Marte, positionFromTheSun = 4] Planet [name = Jupiter, positionFromTheSun = 5] Planet [name = Urano, positionFromTheSun = 7] Planet [name = Pluton, positionFromTheSun = 9] Planet [name = Neptuno, positionFromTheSun = 8] Planet [name = Mercurio, positionFromTheSun = 1] Planet [name = Saturno, positionFromTheSun = 6] Planet [name = Venus, positionFromTheSun = 2] Planet [name = Tierra, positionFromTheSun = 3] Planet [name = Marte, positionFromTheSun = 4] Planet [name = Jupiter, positionFromTheSun = 5] Planet [name = Urano, positionFromTheSun = 7] Planet [name = Neptuno, positionFromTheSun = 8] null
3. Download the Eclipse project of this tutorial:
This was an example of how to set use the LinkedHashSet
Class.
You can download the full source code of this example here: linkedhashset.zip