1

In the given code String object (name) in TreeSet will be displayed in ascending order. How can i display it in descending order using TreeSet ?

 import java.util.*;
 public class Lab15   {
 public static void main  (String[ ] args) {
TreeSet set1 = new TreeSet ();
 set1.add   (new Employee3(11,"shake"));
set1.add(new Employee3(15,"mayur"));
set1.add(new Employee3(13,"podu"));
set1.add(new Employee3(18,"manish"));
set1.add(new Employee3(17,"goku"));

Iterator it1=set1.iterator();
while(it1.hasNext()){
    System.out.println(it1.next());
}      
  }
class Employee3 implements Comparable{

int eid;
String name;
Employee3(int eid,String name) {
    this.eid=eid;
    this.name=name;
}
public String toString(){
    return eid+"\t"+name;
}

public int compareTo(Object obj) {
    if(obj instanceof Employee3){
        Employee3 em=(Employee3)obj;
        return this.name.compareTo(em.name);
    }
    return 0;
}


    }

explain it plz how can i store string objects in treeset in descending order ?

user3379028
  • 31
  • 1
  • 2

3 Answers3

9

You just need to instantiate the TreeSet with

new TreeSet<>(Collections.reverseOrder());

This is a Comparator which reverses the natural order of the objects.

Marko Topolnik
  • 195,646
  • 29
  • 319
  • 436
0

in constructor,call a Comparator.

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class TreeSetDesc {

    private Set set = null;
    private Comparator comparator = null;
    public TreeSetDesc() {
        comparator = new SetComparator();
        set = new TreeSet<String>(comparator);
    }

    public void addItemsToSet() {
        String[] listItems = {"dog", "cat", "cow", "elephant", "sheep"};
        for (int i = 0; i < listItems.length; i++) {
        set.add(listItems[i]);
        }
    }

    public void displaySet() {
        System.out.println("Displaying contents of set");
        for (Object item : set) {
        System.out.println("Item = " + item.toString());
        }
        }

    public void removeItems() {
        System.out.println("Removing contents of set");
        set.remove("dog");
        set.remove("cat");
        set.remove("cow");
        set.remove("elephant");
        set.remove("sheep");
        System.out.println("Contents removed  ,now size of set = " + set.size());
        }

    public static void main(String[] args) {
        TreeSetDesc sample = new TreeSetDesc();
        sample.addItemsToSet();
        sample.displaySet();
        sample.removeItems();
        }

}

see the TreesetComparator to make in descending order.

import java.util.Comparator;

public class SetComparator implements Comparator {
        public int compare(Object firstObject, Object secondObject) {
                String first = (String) firstObject;
                String second = (String) secondObject;
                return second.compareTo(first);
        }
}
TKV
  • 2,533
  • 11
  • 43
  • 56
0

The idea here is that you need to change the way you compare Employee3 objects. The compareTo method should return 0 if the 2 objects are equal and a negative number if the (this) or the object you are using for comparison is smaller than the object it is being compared to, and a positive number if it is bigger. So the elegant solution here would be to swap the compared values by doing:

public int compareTo(Object obj) {
    if(obj instanceof Employee3){
        Employee3 em=(Employee3)obj;
        return em.name.compareTo(this.name);
    }
    return 0;
}
Thresh
  • 470
  • 6
  • 18