// Fig. 18.3: HashtableTest.java // Demonstrates class Hashtable of the java.util package. import java.util.*; import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class HashtableTest extends Applet implements ActionListener { private Hashtable table; private TextField fName, lName; private TextArea display; private Button put, get, remove, empty, containsKey, clear, listElems, listKeys; public void init() { table = new Hashtable(); add( new Label( "First name" ) ); fName = new TextField( 8 ); add( fName ); add( new Label( "Last name (key)" ) ); lName = new TextField( 8 ); add( lName ); display = new TextArea( 4, 45 ); add( display ); put = new Button( "Put" ); put.addActionListener( this ); add( put ); get = new Button( "Get" ); get.addActionListener( this ); add( get ); remove = new Button( "Remove" ); remove.addActionListener( this ); add( remove ); empty = new Button( "Empty" ); empty.addActionListener( this ); add( empty ); containsKey = new Button( "Contains key" ); containsKey.addActionListener( this ); add( containsKey ); clear = new Button( "Clear table" ); clear.addActionListener( this ); add( clear ); listElems = new Button( "List objects" ); listElems.addActionListener( this ); add( listElems ); listKeys = new Button( "List keys" ); listKeys.addActionListener( this ); add( listKeys ); } public void actionPerformed( ActionEvent e ) { if ( e.getSource() == put ) { Employee emp = new Employee( fName.getText(), lName.getText() ); Object val = table.put( lName.getText(), emp ); if ( val == null ) showStatus( "Put: " + emp.toString() ); else showStatus( "Put: " + emp.toString() + "; Replaced: " + val.toString() ); } else if ( e.getSource() == get ) { Object val = table.get( lName.getText() ); if ( val != null ) showStatus( "Get: " + val.toString() ); else showStatus( "Get: " + lName.getText() + " not in table" ); } else if ( e.getSource() == remove ) { Object val = table.remove( lName.getText() ); if ( val != null ) showStatus( "Remove: " + val.toString() ); else showStatus( "Remove: " + lName.getText() + " not in table" ); } else if ( e.getSource() == empty ) { showStatus( "Empty: " + table.isEmpty() ); } else if ( e.getSource() == containsKey ) { showStatus( "Contains key: " + table.containsKey( lName.getText() ) ); } else if ( e.getSource() == clear ) { table.clear(); showStatus( "Clear: Table is now empty" ); } else if ( e.getSource() == listElems ) { StringBuffer buf = new StringBuffer(); for ( Enumeration enum = table.elements(); enum.hasMoreElements(); ) buf.append( enum.nextElement() ).append( '\n' ); display.setText( buf.toString() ); } else if ( e.getSource() == listKeys ) { StringBuffer buf = new StringBuffer(); for ( Enumeration enum = table.keys(); enum.hasMoreElements(); ) buf.append( enum.nextElement() ).append( '\n' ); display.setText( buf.toString() ); } } } class Employee { private String first; private String last; public Employee( String fName, String lName ) { first = fName; last = lName; } public String toString() { return first + " " + last; } }