@SuppressWarnings("unchecked") public static <K, V> Map<K, V> duplicateMap(Map<K, V> original) { if (original instanceof FastCopyHashMap) return (Map<K, V>) ((FastCopyHashMap<K, V>) original).clone(); if (original instanceof HashMap) return (Map<K, V>) ((HashMap<K, V>) original).clone(); if (original instanceof TreeMap) return (Map<K, V>) ((TreeMap<K, V>) original).clone(); if (original.getClass().equals(Collections.emptyMap().getClass())) return Collections.emptyMap(); if (original.getClass().equals(Collections.singletonMap("", "").getClass())) { Map.Entry<K, V> e = original.entrySet().iterator().next(); return Collections.singletonMap(e.getKey(), e.getValue()); } return attemptClone(original); }