Using Comparator to set the order of Objects in TreeSet.
There may be condition that your are not allowed to implements Comparable interface to class being used to create objects those will be sorted by TreeSet.
Some time we requre to provide the sorting criteria on the fly or may be changed at any time according to requirements. We may need to provides different criteria for the same object for ordering on different places.
In this situation, we have only one solution that, Create your own comparator. You can create your own comparator by implementing Comparator interface. Here you can provide you own implemetnation for compare method that wil be used by TreeSet to provide ordering for elements.
package collection.demos;
import java.io.Serializable;
import java.util.TreeSet;
import java.util.Comparator;
class Contact {
String name;
String email;
long phone;
public Contact(String name, String email, long phone) {
this.name = name;
this.email = email;
this.phone = phone;
}
public String toString() {
return name + "\t" + email + "\t" + phone;
}
}
//NameComparator class that impelents comparare method of Comparator to return lexicaly diffirence of two names String
class NameComparator implements Comparator<Contact>,Serializable {
public int compare(Contact o1, Contact o2) {
return o1.name.compareTo(o2.name);
}
}
public class TreeSetDemo3 {
public static void main(String[] args) {
NameComparator comp = new NameComparator();
TreeSet<Contact> contacts = new TreeSet<Contact>(comp);
Contact c1 = new Contact("zyan", "zyan@gmail.com", 123467);
Contact c2 = new Contact("corb", "cord@gmail.com", 534544);
Contact c3 = new Contact("gogle", "gogle@gmail.com", 33444);
Contact c4 = new Contact("sraf", "straf@gmail.com", 255346);
contacts.add(c1);
contacts.add(c2);
contacts.add(c3);
contacts.add(c4);
System.out.println("Using NameComparator");
for (Contact c : contacts) {
System.out.println(c);
}
}
}
/*
OUTPUT
corb cord@gmail.com 534544
gogle gogle@gmail.com 33444
sraf straf@gmail.com 255346
zyan zyan@gmail.com 123467
*/
There may be condition that your are not allowed to implements Comparable interface to class being used to create objects those will be sorted by TreeSet.
Some time we requre to provide the sorting criteria on the fly or may be changed at any time according to requirements. We may need to provides different criteria for the same object for ordering on different places.
In this situation, we have only one solution that, Create your own comparator. You can create your own comparator by implementing Comparator interface. Here you can provide you own implemetnation for compare method that wil be used by TreeSet to provide ordering for elements.
package collection.demos;
import java.io.Serializable;
import java.util.TreeSet;
import java.util.Comparator;
class Contact {
String name;
String email;
long phone;
public Contact(String name, String email, long phone) {
this.name = name;
this.email = email;
this.phone = phone;
}
public String toString() {
return name + "\t" + email + "\t" + phone;
}
}
//NameComparator class that impelents comparare method of Comparator to return lexicaly diffirence of two names String
class NameComparator implements Comparator<Contact>,Serializable {
public int compare(Contact o1, Contact o2) {
return o1.name.compareTo(o2.name);
}
}
public class TreeSetDemo3 {
public static void main(String[] args) {
NameComparator comp = new NameComparator();
TreeSet<Contact> contacts = new TreeSet<Contact>(comp);
Contact c1 = new Contact("zyan", "zyan@gmail.com", 123467);
Contact c2 = new Contact("corb", "cord@gmail.com", 534544);
Contact c3 = new Contact("gogle", "gogle@gmail.com", 33444);
Contact c4 = new Contact("sraf", "straf@gmail.com", 255346);
contacts.add(c1);
contacts.add(c2);
contacts.add(c3);
contacts.add(c4);
System.out.println("Using NameComparator");
for (Contact c : contacts) {
System.out.println(c);
}
}
}
/*
OUTPUT
corb cord@gmail.com 534544
gogle gogle@gmail.com 33444
sraf straf@gmail.com 255346
zyan zyan@gmail.com 123467
*/
Comments