-final class LNodeEntries<K, V> extends LNodeEntry<K, V> {
- // Modified during remove only
- private LNodeEntries<K, V> next;
+abstract class LNodeEntries<K, V> extends LNodeEntry<K, V> {
+ private static final class Single<K, V> extends LNodeEntries<K, V> {
+ Single(final K k, final V v) {
+ super(k, v);
+ }
+
+ @Override
+ boolean isSingle() {
+ return true;
+ }
+
+ @Override
+ LNodeEntries<K, V> next() {
+ return null;
+ }
+ }
+
+ private static final class Multiple<K, V> extends LNodeEntries<K, V> {
+ // Modified during remove only
+ LNodeEntries<K, V> next;
+
+ // Used in remove() only
+ Multiple(final LNodeEntries<K, V> e) {
+ this(e.getKey(), e.getValue(), null);
+ }
+
+ Multiple(final K k, final V v, final LNodeEntries<K, V> next) {
+ super(k, v);
+ this.next = next;
+ }
+
+ @Override
+ boolean isSingle() {
+ return next == null;
+ }