// File: TestHashtable4.java // // Author: Rahul Simha // Created: Sept 23, 1998 // // Illustrates use of library Hashtable // for any object with an object key. import java.util.*; class NameAge { String name; int age; // Constructor. public NameAge (String nameInit, int ageInit) { name = nameInit; age = ageInit; } // Override toString() public String toString () { return "Name=" + name + ", Age=" + age; } // Overrides Object's hashCode() public int hashCode() { // Shift name's hashCode left by 8 bits. return 256*name.hashCode() + age; } // Overrides Object's equals() public boolean equals (Object obj) { NameAge n = (NameAge) obj; if ( (name.equals(n.name)) && (age==n.age) ) return true; else return false; } } class Person { // Instance data. NameAge na; String nickname; // Constructor. public Person (String nameInit, int ageInit, String nickInit) { na = new NameAge (nameInit, ageInit); nickname = nickInit; } // Overrides Object's toString() public String toString() { return "Person: " + na + ", nickname=" + nickname; } // Accessor for NameAge so that it can be used as key. public NameAge getNameAge () { return na; } } public class TestHashtable4 { public static void main (String[] argv) { Hashtable h = new Hashtable (); Person p = new Person ("Franco", 25, "Flatulent Franco"); h.put (p.getNameAge(), p); p = new Person ("Gita", 18, "Gluttonous Gita"); h.put (p.getNameAge(), p); p = new Person ("Heinrich", 43, "Hemorrhaging Heinrich"); h.put (p.getNameAge(), p); // When retrieving you get the whole object back. NameAge query = new NameAge ("Heinrich", 43); p = (Person) h.get (query); System.out.println (p); } }