@Override public Object remove(final Object key) { buildIfNeeded(); return map.remove(key); }
@Override public Set keySet() { if (map == null) { return set(size, keys); } return map.keySet(); }
@Override protected Object clone() { if (map == null) { return null; } if (map instanceof LinkedHashMap) { return ((LinkedHashMap) map).clone(); } return copy(this); }
@Override public String toString() { buildIfNeeded(); return map.toString(); }
@Override public int hashCode() { buildIfNeeded(); return map.hashCode(); }
@Override public boolean containsKey(final Object key) { buildIfNeeded(); return map.containsKey(key); }
@Override public Object get(final Object key) { buildIfNeeded(); return map.get(key); }
@Override public void putAll(final Map m) { buildIfNeeded(); map.putAll(m); }
@Override public boolean equals(final Object o) { buildIfNeeded(); return map.equals(o); }
@Override public Set<Entry<Object, Object>> entrySet() { if (map != null) map.entrySet(); if (delayMap) { return new FakeMapEntrySet(size, keys, values); } buildIfNeeded(); return map.entrySet(); }