import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.AbstractMap;
-import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
private final Equivalence<? super K> equiv;
private AbstractEntrySet<K, V> entrySet;
+ private AbstractKeySet<K> keySet;
TrieMap(final Equivalence<? super K> equiv) {
this.equiv = equiv;
return ret;
}
+ @Override
+ public final Set<K> keySet() {
+ AbstractKeySet<K> ret = keySet;
+ if (ret == null) {
+ keySet = ret = createKeySet();
+ }
+ return ret;
+ }
+
@Override
public final V get(final Object key) {
@SuppressWarnings("unchecked")
abstract AbstractEntrySet<K, V> createEntrySet();
+ abstract AbstractKeySet<K> createKeySet();
+
abstract boolean isReadOnly();
abstract INode<K, V> RDCSS_READ_ROOT(boolean abort);
*
* @return
*/
- abstract Iterator<Entry<K, V>> iterator();
+ abstract AbstractIterator<K, V> iterator();
/* internal methods provided for subclasses */
*
* @return
*/
- final Iterator<Entry<K, V>> immutableIterator() {
- return new TrieMapReadOnlyIterator<>(0, immutableSnapshot());
+ final ImmutableIterator<K, V> immutableIterator() {
+ return new ImmutableIterator<>(immutableSnapshot());
}
@SuppressWarnings("null")