public abstract class AbstractTable implements Function { //Abstract methods public abstract Object get(Object key); public abstract Object put(Object key,Object value); public abstract Object remove(Object key); public abstract java.util.Iterator keys(); public abstract java.util.Iterator values(); //Function methods implementation public boolean containsKey(Object key) { return keySet().contains(key); } public boolean containsValue(Object value) { throw new UnsupportedOperationException(); } public boolean isEmpty() { return entrySet().isEmpty(); } public boolean equals(Object obj) { throw new UnsupportedOperationException(); } public int size() { return entrySet().size(); } public java.util.Set keySet() { java.util.Set result = new java.util.HashSet(); java.util.Iterator it = keys(); while(it.hasNext()) result.add(it.next()); return result; } public java.util.Collection entryValues() { throw new UnsupportedOperationException(); } public java.util.Set entrySet() { java.util.Set result = new java.util.HashSet(); java.util.Iterator it = keys(); while(it.hasNext()) { Object key = it.next(); Entry m = new Entry(key); m.setValue(get(key)); result.add(m); } return result; } //Override public String toString() { String result = ""; java.util.Iterator it = keys(); while(it.hasNext()) { Object key = it.next(); Entry m = new Entry(key); m.setValue(get(key)); result = result + m + "\n"; } return result; } }