Roopak Neevan's Blog

Comparable Interface : Problem while adding object to TreeSet

Posted by: Naveen Kapoor on: November 21, 2008

public class X{
  public static void main(String [] arg){
     Set s=new TreeSet();
     s.add(new Person(20));
     s.add(new Person(10));
     System.out.println(s);
 }
}

class Person{
    int i;
    Person(int i){
         i = this.i; 
    }
}

Can anyone tell me why this code fragment shows me the “ClassCastException”, Using Java 2 1.5 compiler.

In the above code

Set s=new TreeSet();

Set S which is a TreeSet accepts an object that is very true when developer adds an object new Person(20) to code, code will not fail. Now when developer will add another object new Person(10) the code will fail.

Now replace the code with a fresh code

Set s=new TreeSet();
s.add(new Integer(10)); // replace person object with Integer object
s.add(new Integer(20)); // replace person object with Integer object
System.out.println(s);

The above code will not fail.

Now lets dig in to the concept.

TreeSet is a class belongs to Set interface, being a set it does not accept duplicates. First object insertion goes fine here,Now when we are trying to add the second object then there must be a criteria based on which the 2 object should be comparable. And in the above code there is no such criteria, for uniqueness the set internally use compareable interface to check object equality which is not implemented by the Person class,So in this case developer have to implement the comparable interface in his Person Class.

There are fourteen classes in the Java 2 SDK, version 1.2, that implements the Comparable interface.

BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short, Character, CollationKey, Date, File, ObjectStreamField, String

So when developer will try t add the above objects they won’t give any problem, as developer is facing in above scenario.

Below code for person class will solve the developer’s problem.

public class Person implements Comparable{
    int i;
    Person(int i){
        i = this.i; 
    }

 public int compareTo(Object o1) {
        if (this.i == ((Person) o1).i)
               return 0;
        else if ((this.i) > ((Person) o1).i)
            return 1;
        else
            return -1;

    }
}

1 Response to "Comparable Interface : Problem while adding object to TreeSet"

This is really helpful for a beginner like me. Thanks!!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s


  • Diya: Hi all, I am a single mum and unfortunately cannot contact baby's father. I went to london high commission with all documents mentioned on the hci lon
  • Maty: Hi, I am planning to apply for the passport of my new born baby. But currently I am in Germany and my wife and baby is in India. My wife will apply
  • mvp: Hi, I have applied for my 3 month old baby at Pune RPO last week. Like other's mentioned the experience is very smooth. I didn't take my baby with
Follow

Get every new post delivered to your Inbox.