import java.io.*; import java.util.*; class Product implements Comparable { private int part_number; //sometimes we want to compare part_number private String product_name; //sometimes we want compare product name public Product(String name,int num) { part_number=num; product_name=name; } public String getName() {return product_name;} public int compareTo(Product other) {return Integer.compare(part_number, other.part_number);} public String toString() {return product_name+"("+part_number+")";} } public class Main { public static void main(String[] args) { SortedSet parts = new TreeSet<>(); //Set parts = new TreeSet<>(); //OK //SortedSet parts = new HashSet<>(); //Error: HashSet does not keep items sorted => cannot be SortedSet parts.add(new Product("Widget", 4562)); parts.add(new Product("Toaster", 1234)); parts.add(new Product("Modem", 9912)); System.out.println(parts); SortedSet sortByName = new TreeSet<>( new Comparator() { public int compare(Product a, Product b) { String descrA = a.getName(); String descrB = b.getName(); return descrA.compareTo(descrB); } } ); sortByName.addAll(parts); System.out.println(sortByName); } }