<< Chapter < Page | Chapter >> Page > |
I will teach you the meaning of the consistent with equals requirement and show you how to satisfy that requirement for a new class definition.
Finally, I will show you how to define a new class whose objects are eligible for inclusion in a TreeSet collection.
The code in this module is written with no thought given to Generics . As a result, if you copy and compile this code, you will probably get a warning about unchecked or unsafe operations .
While you will ultimately need to understand how to use Generics, that is a very complex topic. An understanding of Generics is beyond the scope of thiscourse. Therefore, for purposes of this course, you can simply ignore those warnings.
Let's begin with a quiz to test your prior knowledge of the Collections Framework.
What output is produced by the program shown in Listing 1 ?
Listing 1 . The program named Comparable04. |
---|
//File Comparable04.java
import java.util.*;public class Comparable04{
public static void main(String args[]){
new Worker().doIt();}//end main()
}//end class Comparable04class Worker{
public void doIt(){Iterator iter;
Collection ref;ref = new TreeSet();
Populator.fillIt(ref);iter = ref.iterator();
while(iter.hasNext()){System.out.print(iter.next());
}//end while loopSystem.out.println();
}//end doIt()}// end class Worker
class Populator{public static void fillIt(Collection ref){
ref.add(new MyClass(4));ref.add(new MyClass(4));
ref.add(new MyClass(3));ref.add(new MyClass(2));
ref.add(new MyClass(1));}//end fillIt()
}//end class Populatorclass MyClass{
int data;MyClass(){
data = 0;}//end noarg constructor
MyClass(int data){this.data = data;
}//end parameterized constructorpublic String toString(){
return "" + data;}//end overridden toString()
}//end MyClass |
If your answer was B. Runtime Error , you were correct.
The runtime error was caused by the code shown in Listing 2 .
Listing 2 . The code with the problem. |
---|
class Populator{
public static void fillIt(Collection ref){ref.add(new MyClass(4)); |
This code produced a runtime error for the following reasons.
The incoming parameter of the fillIt method is a reference to an object of type TreeSet but it is received as type Collection . The TreeSet class implements the Collection , Set , and SortedSet interfaces. (In this module, we will be primarily interested in the Set and SortedSet interfaces.)
The contract for the add method of the Set interface reads partially as follows:
"Adds the specified element to this set if it is not already present ... If this set already contains the specified element, the call leaves this setunchanged and returns false. ... this ensures that sets never contain duplicate elements."
This means that whenever the add method is called on a Set object, the add method must have a way of determining if the element being added is a duplicate of an element that already exists in the collection.This means that it must be possible for the add method to compare the new element with all of the existing elements to determine if the newelement is a duplicate of any of the existing elements.
Notification Switch
Would you like to follow the 'Object-oriented programming (oop) with java' conversation and receive update notifications?