/*
  Associative Array class
    by milan ramaiya

  10.28.2001
*/

import java.util.*;

class AssocArray
{
    // Item class - used to store both key and data
    private class Item
    {
        String key;
        String value;

        Item(String k, String v) 
        { key = k; value = v; }
    }
    
    Vector array = new Vector();     // Storage for array elements

    /*
      PUBLIC FUNCTIONS
    */

    public int length()
    { return array.size(); }
    
    // get value by key    
    public String get(String key)
    {
        Item item = getItem(key);
        if(item!=null)
            return item.value;
        else
            throw new NoSuchElementException();
    }

    // get value by key, specify default value if key doesn't exist
    public String get(String key, String defaultValue)
    {
        Item item = getItem(key);
        return (item!=null) ? item.value : defaultValue;
    }

    // get value by index
    public String get(int i)
    { return ((Item)array.get(i)).value; }

    // set value
    public void set(String key, String value)
    {
        Item item = getItem(key);
        if(item!=null)
            item.value = value;
        else        
            array.add(new Item(key, value));
    }

    // remove value by key
    public void remove(String key)
    {
        int i = getIndex(key);
        if(i!=-1)
            array.remove(i);
        else
            throw new NoSuchElementException();
    }

    // remove value by index
    public void remove(int i)
    { array.remove(i); }

    // get key for specified index
    public String getKey(int i)
    { return ((Item)array.get(i)).key; }

    /*
      PRIVATE FUNCTIONS
    */

    // get Item by key
    private Item getItem(String key)
    {
        for(int i=0; i<array.size(); i++)
            if( ((Item)array.get(i)).key.equals(key) )
                return (Item)array.get(i);
        return null;
    }

    // get Item index by key
    private int getIndex(String key)
    {
        for(int i=0; i<array.size(); i++)
            if( ((Item)array.get(i)).key.equals(key) )
                return i;
        return -1;
    }
}
