Hi guys i’ve never written a comparator b4 and im having a real problem. I’ve created a hashtable.
Hashtable <String, Objects> ht;
Could someone show how you’d write a comparator for a Hashtable? the examples i’ve seen overide equals and everything but i simply dont have a clue. The code below is not mine but an example i found, the key thing in hashtables means i cant do it like this i guess.
public class Comparator implements Comparable<Name> {
private final String firstName, lastName;
public void Name(String firstName, String lastName) {
if (firstName == null || lastName == null)
throw new NullPointerException();
this.firstName = firstName;
this.lastName = lastName;
}
public String firstName() { return firstName; }
public String lastName() { return lastName; }
public boolean equals(Object o) {
if (!(o instanceof Name))
return false;
Name n = (Name)o;
return n.firstName.equals(firstName) &&
n.lastName.equals(lastName);
}
public int hashCode() {
return 31*firstName.hashCode() + lastName.hashCode();
}
public String toString() {
return firstName + " " + lastName;
}
public int compareTo(Name n) {
int lastCmp = lastName.compareTo(n.lastName);
return (lastCmp != 0 ? lastCmp :
firstName.compareTo(n.firstName));
}
}
Comparators are used to sort a list. A
Hashtable(note the case) is not ordered by its elements. You can order a table by iterating over its keys (in the case you’d want to order on its keys, I presume) and put them in aList. The next thing to do is to sort theListand iterate over theList, and use agetout of theHashtableto get its associated value.Here is an example (using
HashMap, since it’s more integrated with the rest of the Java Collections. AHashMapis essentially the same asHashtable.):The order of the list
keysis sorted by the anonymousComparatorclass. It will sort alphabetically, as is the default for Strings. You can use your own key object, like you mentioned. If you don’t implementComparatorin this key object, then you can supply, as in the above example. Else you can use the defaultComparatorby calling:Which will use the classes implementation of
Comparator. If it does not implementComparator, then it will throw an exception (since it will cast to aComparator)