import java.util.Vector;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Enumeration;

public class Table {
    LinkedList v;

    public Table () {
	v = new LinkedList ();
    }

    public void put (Object key, Object value) {
	if (containsKey (key)) {
	    update (key, value);
	} else {
	    KeyValuePair pair = new KeyValuePair (key, value);
	    v.add (pair);
	}
    }

    public Object get (Object key) {
	Iterator iterator = v.iterator ();
        while (iterator.hasNext ()) {
	    KeyValuePair pair = (KeyValuePair) iterator.next ();
	    if (key.equals (pair.key)) {
		return pair.value;
	    }
        }
	return null;
    }

    public void update (Object key, Object value) {
	Iterator iterator = v.iterator ();
        while (iterator.hasNext ()) {
	    KeyValuePair pair = (KeyValuePair) iterator.next ();
	    if (key.equals (pair.key)) {
		pair.value = value;
		break;
	    }
        }
    }

    public void print () {
        Iterator iterator = v.iterator ();
        while (iterator.hasNext ()) {
            System.out.println (iterator.next ());
        }
    }

    public boolean containsKey (Object key) {
	Iterator iterator = v.iterator ();
        while (iterator.hasNext ()) {
	    KeyValuePair pair = (KeyValuePair) iterator.next ();
	    if (key.equals (pair.key)) {
		return true;
	    }
        }
	return false;
    }

    public Enumeration keys () {
	Vector keys = new Vector ();
	Iterator iterator = v.iterator ();
        while (iterator.hasNext ()) {
	    KeyValuePair pair = (KeyValuePair) iterator.next ();
	    keys.add (pair.key);
        }
	return keys.elements ();
    }
}

