TreeSet is implementation of Set interface
We have other implementation as well like HashSet and LinkedHashset.
We use HashSet if we don't need any order
LinkedHasSet we use when we need to maintain insertion order.
But why we need TreeSet.....?
If you want elements to be ordered according to some Comparator, then use TreeSet.
TreeSet Example With No Comparator
Class
package TreeSetWithComparator;
import java.util.TreeSet;
public class TreeSetWithoutComparator {
public static void main(String[] args) {
//Elements will be saved in ascending order
TreeSet<Integer> treeSet=new TreeSet<>();
treeSet.add(11);
treeSet.add(23);
treeSet.add(5);
treeSet.add(18);
treeSet.add(15);
System.out.println(treeSet);
}
}
We have other implementation as well like HashSet and LinkedHashset.
We use HashSet if we don't need any order
LinkedHasSet we use when we need to maintain insertion order.
But why we need TreeSet.....?
If you want elements to be ordered according to some Comparator, then use TreeSet.
TreeSet Example With No Comparator
Class
package TreeSetWithComparator;
import java.util.TreeSet;
public class TreeSetWithoutComparator {
public static void main(String[] args) {
//Elements will be saved in ascending order
TreeSet<Integer> treeSet=new TreeSet<>();
treeSet.add(11);
treeSet.add(23);
treeSet.add(5);
treeSet.add(18);
treeSet.add(15);
System.out.println(treeSet);
}
}
Output
[5, 11, 15, 18, 23] // ascending order
Class
MyComparator
package TreeSetWithComparator;
import java.util.Comparator;
public class MyComparator implements Comparator<Employee> {
@Override
public int compare(Employee e1, Employee e2) {
if(e1.name == e2.name) // here if name is equal then skip
{
return 0;
}
else
return e2.salary-e1.salary; // here e2-e1 not e1-e2
}
}
Employee Class With TreeSet With Comparator
Find Employee with Highest Salary and Remove Duplicate Enteries
package TreeSetWithComparator;
import java.util.Iterator;
import java.util.PriorityQueue;
import java.util.TreeSet;
public class Employee {
String name;
int salary;
//Creating Constructor
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
/*
The toString() method returns the string representation of the object.
If you print any object, java compiler internally invokes the toString() method on the object.
So overriding the toString() method, returns the desired output, it can be the state of an object
*/
@Override
public String toString() {
return name + " and " + salary;
}
public static void main(String[] args) {
Employee employee = new Employee("Neeraj", 400000);
System.out.println(employee);
MyComparator comparator = new MyComparator();
TreeSet<Employee> treeSet = new TreeSet<Employee>(comparator);
treeSet.add(new Employee("AAA", 500));
treeSet.add(new Employee("EEE", 1000)); //Highest Salary
treeSet.add(new Employee("BBB", 100));
treeSet.add(new Employee("AAA", 100));// Duplicate
treeSet.add(new Employee("CCC", 100));
treeSet.add(new Employee("CCC", 100));//Duplicate
treeSet.add(new Employee("AAA", 100));//Duplicate
treeSet.add(new Employee("BBB", 100));//Duplicate
treeSet.add(new Employee("DDD", 900));//Second Highest Salary
//Output will have max salary Employee on top and Duplicate Employees would be removed //keeping one entry of employee only other duplicate enteries would be removed
System.out.println(treeSet);
}
}
Output
Neeraj and 400000
[EEE and 1000, DDD and 900, AAA and 500, BBB and 100]
No comments:
Post a Comment