00001 package ca.mcgill.sable.util;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 public class HashMap extends AbstractMap
00077 {
00078 java.util.Hashtable table;
00079
00080 private class HashEntry implements Map.Entry
00081 {
00082 private Object key;
00083
00084 public HashEntry(Object key)
00085 {
00086 this.key = key;
00087 }
00088
00089 public boolean equals(Object obj)
00090 {
00091 if(!(obj instanceof Map.Entry))
00092 return false;
00093 else {
00094 Map.Entry e = (Map.Entry) obj;
00095
00096 return e.getKey().equals(key) && getValue().equals(e.getValue());
00097 }
00098 }
00099
00100 public Object getKey()
00101 {
00102 return key;
00103 }
00104
00105 public Object getValue()
00106 {
00107 return get(key);
00108 }
00109
00110 public Object setValue(Object obj)
00111 {
00112 return put(key, obj);
00113 }
00114
00115 public int hashCode()
00116 {
00117 return (getKey()==null ? 0 : getKey().hashCode()) ^ (getValue()==null ? 0 :
00118 getValue().hashCode());
00119 }
00120
00121 public String toString()
00122 {
00123 return key.toString() + " -> " + get(key);
00124 }
00125 }
00126
00127 public HashMap()
00128 {
00129 table = new java.util.Hashtable();
00130 }
00131 public HashMap(int initialCapacity)
00132 {
00133 table = new java.util.Hashtable(initialCapacity);
00134 }
00135 public HashMap(int initialCapacity, float loadFactor)
00136 {
00137 if(initialCapacity <= 0)
00138 throw new RuntimeException("initialCapacity is " + initialCapacity);
00139
00140 if(loadFactor <= 0)
00141 throw new RuntimeException("loadFactor is " + initialCapacity);
00142
00143
00144 table = new java.util.Hashtable(initialCapacity, loadFactor);
00145 }
00146 public void clear()
00147 {
00148 table.clear();
00149 }
00150 public boolean contains(Object value)
00151 {
00152 return table.contains(value);
00153 }
00154 public boolean containsKey(Object key)
00155 {
00156 if(key == null)
00157 throw new RuntimeException("Hey hey!");
00158
00159 return table.containsKey(key);
00160 }
00161
00162
00163
00164
00165
00166 public Collection entries()
00167 {
00168 java.util.Enumeration entries = table.keys();
00169
00170
00171
00172
00173
00174
00175 List keyList = new ArrayList();
00176
00177 while(entries.hasMoreElements())
00178 keyList.add(new HashEntry(entries.nextElement()));
00179
00180 return keyList;
00181 }
00182 public Object get(Object entry)
00183 {
00184 return table.get(entry);
00185 }
00186 public boolean isEmpty()
00187 {
00188 return table.size() == 0;
00189 }
00190 public Set keySet()
00191 {
00192 java.util.Enumeration keys = table.keys();
00193 Set keySet = new HashSet();
00194
00195 while(keys.hasMoreElements())
00196 keySet.add(keys.nextElement());
00197
00198 return keySet;
00199 }
00200 public Object put(Object key, Object value)
00201 {
00202 return table.put(key, value);
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213 }
00214 public Object remove(Object obj)
00215 {
00216 return table.remove(obj);
00217 }
00218 public int size()
00219 {
00220 return table.size();
00221 }
00222 }