In this article, we will discuss how to sort contents of LinkedHashSet
Key points about LinkedList:
- LinkedHashSet maintains insertion-order
- as it uses doubly-linked list and hash table to store element/objects
Different ways to sort LinkedHashSet :
- Convert LinkedHashSet to TreeSet for natural-ordering
- Convert LinkedHashSet to TreeSet for reverse-ordering by providing Comparator based customized-sorting logic
- Using ArrayList and Collections class’ utility method sort();
Let us move forward to discuss different ways to sort LinkedHashSet contents
Way 1: Convert LinkedHashSet to TreeSet for natural-ordering
Steps:
- Create new LinkedHashSet object
- Store/add contents to LinkedHashSet
- Create new TreeSet object,
- Pass LinkedHashSet contents as argument to TreeSet’ inter-conversion constructor
Syntax:
// convert LinkedHashSet to TreeSet TreeSet<String> tSet = new TreeSet<String>(lhsCompanies);
SortingLinkedHashSetUsingTreeSet.java
package in.bench.resources.collection; import java.util.LinkedHashSet; import java.util.TreeSet; public class SortingLinkedHashSetUsingTreeSet { public static void main(String[] args) { // creating LinkedHashSet object of type String LinkedHashSet<String> lhsCompanies = new LinkedHashSet<String>(); // adding elements to LinkedHashSet object lhsCompanies.add("LinkedIn"); lhsCompanies.add("Amazon"); lhsCompanies.add("Google"); lhsCompanies.add("Apple"); lhsCompanies.add("Facebook"); lhsCompanies.add("Oracle"); lhsCompanies.add("Microsoft"); // Iterating using enhanced for-loop System.out.println("Insertion Order:" + " Iterating LinkedHashSet\n"); for(String company : lhsCompanies) { System.out.println(company); } // convert LinkedHashSet to TreeSet TreeSet<String> tSet = new TreeSet<String>(lhsCompanies); // Iterating using enhanced for-loop System.out.println("\n\nAscending sorting-order:" + " Iterating TreeSet\n"); for(String company : tSet) { System.out.println(company); } } }
Output:
Insertion Order: Iterating LinkedHashSet LinkedIn Amazon Google Apple Facebook Oracle Microsoft Ascending sorting-order: Iterating TreeSet Amazon Apple Facebook Google LinkedIn Microsoft Oracle
Way 2: Convert LinkedHashSet to TreeSet for reverse-ordering
Steps:
- Create new LinkedHashSet object
- Store/add contents to LinkedHashSet
- Create new TreeSet object and provide reverse-order sorting-logic using Comparator
- Add LinkedHashSet contents to TreeSet using addAll(); method
Syntax:
// create new TreeSet object and provide reverse-sorting logic TreeSet<String> tSet = new TreeSet<String>( new Comparator<String>() { @Override public int compare(String str1, String str2) { return str2.compareTo(str1); } }); // add LinkedHashSet to TreeSet for reverse-sorting elements tSet.addAll(lhsCompanies);
ReverseSortingLinkedHashSetUsingTreeSet.java
package in.bench.resources.collection; import java.util.Comparator; import java.util.LinkedHashSet; import java.util.TreeSet; public class ReverseSortingLinkedHashSetUsingTreeSet { public static void main(String[] args) { // creating LinkedHashSet object of type String LinkedHashSet<String> lhsCompanies = new LinkedHashSet<String>(); // adding elements to LinkedHashSet object lhsCompanies.add("LinkedIn"); lhsCompanies.add("Amazon"); lhsCompanies.add("Google"); lhsCompanies.add("Apple"); lhsCompanies.add("Facebook"); lhsCompanies.add("Oracle"); lhsCompanies.add("Microsoft"); // Iterating using enhanced for-loop System.out.println("Insertion Order:" + " Iterating LinkedHashSet\n"); for(String company : lhsCompanies) { System.out.println(company); } // create new TreeSet object and provide reverse-sorting logic TreeSet<String> tSet = new TreeSet<String>( new Comparator<String>() { @Override public int compare(String str1, String str2) { return str2.compareTo(str1); } }); // add LinkedHashSet to TreeSet for reverse-sorting elements tSet.addAll(lhsCompanies); // Iterating using enhanced for-loop System.out.println("\n\nDescending sorting-order:" + " Iterating TreeSet\n"); for(String company : tSet) { System.out.println(company); } } }
Output:
Insertion Order: Iterating LinkedHashSet LinkedIn Amazon Google Apple Facebook Oracle Microsoft Descending sorting-order: Iterating TreeSet Oracle Microsoft LinkedIn Google Facebook Apple Amazon
Way 3: Using ArrayList and Collections’ class utility method sort();
Steps:
- Create new LinkedHashSet object
- Store/add contents to LinkedHashSet
- Convert LinkedHashSet to ArrayList using inter-conversion constructor
- Invoke sort(); method on ArrayList contents using Collections‘ class
- Invoke clear(); method on original LinkedHashSet, if we want to convert back ArrayList to LinkedHashSet
- Finally, convert ArrayList to LinkedHashSet by adding ArrayList contents to LinkedHashSet, as LinkedHashSet maintains insertion-order, if we want to retain original LinkedHashSet
- Note : we can sort in reverse-order using Comparator and providing reverse-order sorting logic
Syntax:
// convert LinkedHashSet to ArrayList List<String> lst = new ArrayList<String>(lhsCompanies); // sort using Collections class Collections.sort(lst); // clear or empty LinkedHashSet lhsCompanies.clear(); // convert sorted ArrayList to LinkedHashSet, afetr clear(); lhsCompanies.addAll(lst);
SortingLinkedHashSetUsingArrayList.java
package in.bench.resources.collection; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; public class SortingLinkedHashSetUsingArrayList { public static void main(String[] args) { // creating LinkedHashSet object of type String LinkedHashSet<String> lhsCompanies = new LinkedHashSet<String>(); // adding elements to LinkedHashSet object lhsCompanies.add("LinkedIn"); lhsCompanies.add("Amazon"); lhsCompanies.add("Google"); lhsCompanies.add("Apple"); lhsCompanies.add("Facebook"); lhsCompanies.add("Oracle"); lhsCompanies.add("Microsoft"); // Iterating using enhanced for-loop System.out.println("Insertion Order:" + " Iterating LinkedHashSet\n"); for(String company : lhsCompanies) { System.out.println(company); } // convert LinkedHashSet to ArrayList List<String> lst = new ArrayList<String>(lhsCompanies); // sort using Collections class Collections.sort(lst); // clear or empty LinkedHashSet lhsCompanies.clear(); // convert sorted ArrayList to LinkedHashSet, afetr clear(); lhsCompanies.addAll(lst); // Iterating using enhanced for-loop System.out.println("\n\nAscending sorting-order:" + " Iterating LinkedHashSet\n"); for(String company : lhsCompanies) { System.out.println(company); } } }
Output:
Insertion Order: Iterating LinkedHashSet LinkedIn Amazon Google Apple Facebook Oracle Microsoft Ascending sorting-order: Iterating LinkedHashSet Amazon Apple Facebook Google LinkedIn Microsoft Oracle
References:
- https://docs.oracle.com/javase/tutorial/collections/intro/
- https://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html
- https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html
- https://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
- https://docs.oracle.com/javase/7/docs/api/java/util/Set.html
- https://docs.oracle.com/javase/7/docs/api/java/util/class-use/HashSet.html
- https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
- https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
- http://docs.oracle.com/javase/7/docs/api/index.html?java/util/class-use/LinkedHashSet.html
Happy Coding !!
Happy Learning !!