import java.io.Serializable; 
import java.util.AbstractMap; 
import java.util.AbstractSet; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 
 
public class ArrayMap extends AbstractMap implements Cloneable, Serializable { 
 
  static class Entry implements Map.Entry { 
    protected Object key, value; 
 
    public Entry(Object key, Object value) { 
      this.key = key; 
      this.value = value; 
    } 
 
    public Object getKey() { 
      return key; 
    } 
 
    public Object getValue() { 
      return value; 
    } 
 
    public Object setValue(Object newValue) { 
      Object oldValue = value; 
      value = newValue; 
      return oldValue; 
    } 
 
    public boolean equals(Object o) { 
      if (!(o instanceof Map.Entry)) { 
        return false; 
      } 
      Map.Entry e = (Map.Entry) o; 
      return (key == null ? e.getKey() == null : key.equals(e.getKey())) 
          && (value == null ? e.getValue() == null : value.equals(e 
              .getValue())); 
    } 
 
    public int hashCode() { 
      int keyHash = (key == null ? 0 : key.hashCode()); 
      int valueHash = (value == null ? 0 : value.hashCode()); 
      return keyHash ^ valueHash; 
    } 
 
    public String toString() { 
      return key + "=" + value; 
    } 
  } 
 
  private Set entries = null; 
 
  private ArrayList list; 
 
  public ArrayMap() { 
    list = new ArrayList(); 
  } 
 
  public ArrayMap(Map map) { 
    list = new ArrayList(); 
    putAll(map); 
  } 
 
  public ArrayMap(int initialCapacity) { 
    list = new ArrayList(initialCapacity); 
  } 
 
  public Set entrySet() { 
    if (entries == null) { 
      entries = new AbstractSet() { 
        public void clear() { 
          list.clear(); 
        } 
 
        public Iterator iterator() { 
          return list.iterator(); 
        } 
 
        public int size() { 
          return list.size(); 
        } 
      }; 
    } 
    return entries; 
  } 
 
  public Object put(Object key, Object value) { 
    int size = list.size(); 
    Entry entry = null; 
    int i; 
    if (key == null) { 
      for (i = 0; i < size; i++) { 
        entry = (Entry) (list.get(i)); 
        if (entry.getKey() == null) { 
          break; 
        } 
      } 
    } else { 
      for (i = 0; i < size; i++) { 
        entry = (Entry) (list.get(i)); 
        if (key.equals(entry.getKey())) { 
          break; 
        } 
      } 
    } 
    Object oldValue = null; 
    if (i < size) { 
      oldValue = entry.getValue(); 
      entry.setValue(value); 
    } else { 
      list.add(new Entry(key, value)); 
    } 
    return oldValue; 
  } 
 
  public Object clone() { 
    return new ArrayMap(this); 
  } 
 
  public static void main(String args[]) { 
    Map map = new ArrayMap(13); 
    map.put("1", "One"); 
    map.put("2", "Two"); 
    map.put("3", "Three"); 
    map.put("4", "Four"); 
    map.put("5", "Five"); 
    map.put("6", "Six"); 
    map.put("7", "Seven"); 
    map.put("8", "Eight"); 
    map.put("9", "Nine"); 
    map.put("10", "Ten"); 
    map.put("11", "Eleven"); 
    map.put("12", "Twelve"); 
    map.put("13", "Thirteen"); 
    System.out.println(map); 
    System.out.println(map.keySet()); 
    System.out.println(map.values()); 
  } 
} 
            
          
     
     
     
     
  
  |