// : 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);
}
} ///:~