@Override public MapIterator<K, V> mapIterator() { if (map instanceof IterableMap) { final MapIterator<K, V> it = ((IterableMap<K, V>) map).mapIterator(); return UnmodifiableMapIterator.unmodifiableMapIterator(it); } final MapIterator<K, V> it = new EntrySetMapIterator<>(map); return UnmodifiableMapIterator.unmodifiableMapIterator(it); }