// 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.Hashtable; 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 insert (Hashtable h, Person p) { Person p2 = (Person) h.put (p.getNameage(), p); if (p2 != null) System.out.println ("Warning: " + p + " replaced " + p2); } public static void main (String[] argv) { Hashtable h = new Hashtable (); insert (h, new Person ("Franco", 25, "Flatulent Franco")); insert (h, new Person ("Gita", 18, "Gluttonous Gita")); insert (h, new Person ("Heinrich", 43, "Hemorrhaging Heinrich")); // When retrieving you get the whole object back. Person p = (Person) h.get (new NameAge ("Heinrich", 43)); System.out.println (p); } }