00001: package clogs.util; 00002: 00003: import java.util.NoSuchElementException; 00004: 00005: 00006: class MapList<A,B> extends Map<A,B> 00007: { 00008: private final List<A> keys; 00009: private final List<B> values; 00010: 00011: 00012: MapList () 00013: { 00014: this.keys = List.<A>nil (); 00015: this.values = List.<B>nil (); 00016: } 00017: 00018: 00019: private MapList (List<A> keys, List<B> values) 00020: { 00021: this.keys = keys; 00022: this.values = values; 00023: } 00024: 00025: 00026: public Map<A,B> add (A key, B value) 00027: { 00028: return new MapList<A,B> (keys.cons (key), values.cons (value)); 00029: } 00030: 00031: 00032: public B get (A key) 00033: { 00034: List<A> ks = keys; 00035: List<B> vs = values; 00036: while (!ks.isNil ()) { 00037: if (ks.head ().equals (key)) { 00038: return vs.head (); 00039: } 00040: ks = ks.tail (); 00041: vs = vs.tail (); 00042: } 00043: return null; 00044: } 00045: 00046: 00047: public List<A> keyList () 00048: { 00049: return keys; 00050: } 00051: 00052: 00053: public String toString () 00054: { 00055: StringBuffer sb = new StringBuffer (); 00056: 00057: if (keys.isNil ()) { 00058: return ("[]"); 00059: } 00060: 00061: sb.append ("[ "); 00062: List<A> ks = keys; 00063: List<B> vs = values; 00064: boolean first = true; 00065: while (!ks.isNil ()) { 00066: if (first) { 00067: first = false; 00068: } else { 00069: sb.append (", "); 00070: } 00071: sb.append (ks.head ()); 00072: sb.append (" = "); 00073: sb.append (vs.head ()); 00074: ks = ks.tail (); 00075: vs = vs.tail (); 00076: } 00077: sb.append (" ]"); 00078: 00079: return sb.toString (); 00080: } 00081: } 00082: