Mega Code Archive

 
Categories / Java / Collections Data Structure
 

A Map implemented with ArrayLists

// : c11:SlowMap.java // A Map implemented with ArrayLists. // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.util.AbstractMap; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; public class SlowMap extends AbstractMap {   private List keys = new ArrayList(), values = new ArrayList();   public Object put(Object key, Object value) {     Object result = get(key);     if (!keys.contains(key)) {       keys.add(key);       values.add(value);     } else       values.set(keys.indexOf(key), value);     return result;   }   public Object get(Object key) {     if (!keys.contains(key))       return null;     return values.get(keys.indexOf(key));   }   public Set entrySet() {     Set entries = new HashSet();     Iterator ki = keys.iterator(), vi = values.iterator();     while (ki.hasNext())       entries.add(new MPair(ki.next(), vi.next()));     return entries;   }   public String toString() {     StringBuffer s = new StringBuffer("{");     Iterator ki = keys.iterator(), vi = values.iterator();     while (ki.hasNext()) {       s.append(ki.next() + "=" + vi.next());       if (ki.hasNext())         s.append(", ");     }     s.append("}");     return s.toString();   }   public static void main(String[] args) {     SlowMap m = new SlowMap();     m.put("Adobe", "Mountain View, CA");     m.put("IBM", "White Plains, NY");     m.put("Learning Tree", "Los Angeles, CA");     m.put("Microsoft", "Redmond, WA");     m.put("Netscape", "Mountain View, CA");     m.put("O'Reilly", "Sebastopol, CA");     m.put("Sun", "Mountain View, CA");     System.out.println(m);   } } ///:~ class MPair implements Entry, Comparable {   Object key, value;   MPair(Object k, Object v) {     key = k;     value = v;   }   public Object getKey() { return key; }   public Object getValue() { return value; }   public Object setValue(Object v){     Object result = value;     value = v;     return result;   }   public boolean equals(Object o) {     return key.equals(((MPair)o).key);   }   public int compareTo(Object rv) {     return ((Comparable)key).compareTo(       ((MPair)rv).key);   } } ///:~