@Override public boolean isEmpty() { return type == Type.EMPTY || size() == 0; }
@Override public V put(K key, V value) { switch (type) { case EMPTY: singleKey = key; singleValue = value; type = Type.SINGLE; return null; case SINGLE: if (key == null) { if (singleKey == null) { return replaceValue(value); } else { return switchToMap(key, value); } } else if (key.equals(singleKey)) { return replaceValue(value); } else { return switchToMap(key, value); } case MAP: return inner.put(key, value); } throw new IllegalStateException(); }