Comparable Interface
It is available in java.lang
package. This interface contains only one method compareTo()
public
int compareTo(Object obj)
obj1.compareTo(obj2)
return –ve
if obj1 has to come before obj2.
+ ve
if obj1 has to come after obj2.
0 if
obj1 and obj2 are equal(Duplicate Objects).
Ex:
System.out.println("A".compareTo("Z"));
à
-ve
System.out.println("K".compareTo("A"));
à_ve
System.out.println("K".compareTo("K"));
à
0
System.out.println("a".compareTo("A"));
à+ve
System.out.println("A".compareTo(new
Integer(10))); à classCastException
System.out.println("A".compareTo(null));
à
NullPointerException
Note: while Inserting the objects into the
TreeSet JVM internally uses compareTo() method if we are depending on natural
sorting order.
Sometimes we have to define our own
customized sorting order, then we should go for comparator Interface.
Comparator Iterface
By using comparator object we can
define our own customized sorting. Comparator Interface is available in java.util
package. This interface defines the following 2 methods.
1) public
int compare(Object obj1, Object obj2)
returns –ve if obj1 has to come before
obj2
+ve if obj1 has to come after
obj2
0 if
obj1 and obj2 are equal.
2) public
boolean equals(Object obj)
When ever we are implementing
comparator interface compulsory we should provide implementation for compare
method. Implementing equals method is optional because it is already available from
object class through inheritance.
Write a program to insert integer
objects into the Treeset where the sorting order is descending order.
import java.util.*;
class TreeSetDemo
{
public
static void main(String arg[])
{
TreeSet
t = new TreeSet(new MyComparator());
t.add(10);
t.add(5);
t.add(15);
t.add(20);
t.add(0);
System.out.println(t);
}
}
class MyComparator implements
Comparator
{
public
int compare(Object obj1, Object obj2)
{
Integer
I1 = (Integer)obj1;
Integer
I2 = (Integer)obj2;
if(I1
return
+1;
else
if (I1>I2)
return
-1;
else
return
0;
}
}
O/P:- [20,15,10,5,0]
Flow of control in MyComparator
compare(10, 5) à
10, 5
compare(15, 10) à
15, 10, 5
compare(20, 15) à
20, 15, 10, 5
compare(0, 20)
compare(0, 15)
compare(0, 10)
compare(0, 5) à20, 15, 10, 5, 0
if we are not passing comparator
object JVM will always call compareTo() method which is meant for default
natural sorting order.
Case1: If we implement compare
method as follows the outputs are
public int compare(Object obj1,
Object obj2)
{
Integer
I1 = (Integer)obj1;
Integer
I2 = (Integer)obj2;
return
I1.compareTo(I2); à [0,5,10,15,20]
return
I2.compareTo(I1); à [20,15,10,5,0]
return
-I1.compareTo(I2); à [20,15,10,5,0]
return
-I2.compareTo(I1); à [0,5,10,15,20]
return
I2-I1; à
[20,15,10,5,0]
return
I1-I2; à
[0,5,10,15,20]
}
Case2: If we implement compare
method as follows
public int compare(Object obj1,
Object obj2)
{
return
-1; à
[0,20,15,5,10] (reverse
of Insertion order)
return 1;
à
[10,5,15,20,0]
(Insertion Order)
return 0;
à
[10] (All the remaining
elements considered as duplicate objects)
}
Write a program to insert String
Objects to the TreeSet Where the Sorting order is reverse of Alphabetical
order.
import java.util.*;
class TreeSetDemo
{
public
static void main(String arg[])
{
TreeSet
t = new TreeSet(new MyComparator());
t.add("chiru");
t.add("venky");
t.add("nagaruna");
t.add("balaiah");
t.add("saikumar");
t.add("suman");
System.out.println(t);
}
}
class MyComparator implements
Comparator
{
public
int compare(Object obj1, Object obj2)
{
String
s1 = (String)obj1;
String
s2 = (String)obj2;
return
s2.compareTo(s1);
}
}
No comments:
Post a Comment