Skip to content

Commit 4768c99

Browse files
authored
Merge pull request #121 from rovarga/itr
Improve {Abstract,Mutable}KeySet.iterator() memory overhead
2 parents 7521ec6 + 9962d4e commit 4768c99

File tree

2 files changed

+43
-31
lines changed

2 files changed

+43
-31
lines changed

triemap/src/main/java/tech/pantheon/triemap/AbstractKeySet.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -78,18 +78,24 @@ public final Spliterator<K> spliterator() {
7878
abstract int spliteratorCharacteristics();
7979

8080
final Iterator<K> immutableIterator() {
81-
return new Iterator<>() {
82-
private final ImmutableIterator<K, ?> itr = map().immutableIterator();
83-
84-
@Override
85-
public boolean hasNext() {
86-
return itr.hasNext();
87-
}
88-
89-
@Override
90-
public K next() {
91-
return itr.next().getKey();
92-
}
93-
};
81+
return new Itr<>(map().immutableIterator());
82+
}
83+
84+
private static final class Itr<K> implements Iterator<K> {
85+
private final ImmutableIterator<K, ?> delegate;
86+
87+
Itr(final ImmutableIterator<K, ?> delegate) {
88+
this.delegate = delegate;
89+
}
90+
91+
@Override
92+
public boolean hasNext() {
93+
return delegate.hasNext();
94+
}
95+
96+
@Override
97+
public K next() {
98+
return delegate.next().getKey();
99+
}
94100
}
95101
}

triemap/src/main/java/tech/pantheon/triemap/MutableKeySet.java

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,7 @@ final class MutableKeySet<K> extends AbstractKeySet<K> {
3232

3333
@Override
3434
public Iterator<K> iterator() {
35-
return new Iterator<>() {
36-
private final AbstractIterator<K, ?> itr = map().iterator();
37-
38-
@Override
39-
public boolean hasNext() {
40-
return itr.hasNext();
41-
}
42-
43-
@Override
44-
public K next() {
45-
return itr.next().getKey();
46-
}
47-
48-
@Override
49-
public void remove() {
50-
itr.remove();
51-
}
52-
};
35+
return new Itr<>(map().iterator());
5336
}
5437

5538
@Override
@@ -67,4 +50,27 @@ public boolean remove(final Object o) {
6750
int spliteratorCharacteristics() {
6851
return Spliterator.DISTINCT | Spliterator.CONCURRENT | Spliterator.NONNULL;
6952
}
53+
54+
private static final class Itr<K> implements Iterator<K> {
55+
private final AbstractIterator<K, ?> delegate;
56+
57+
Itr(final AbstractIterator<K, ?> delegate) {
58+
this.delegate = delegate;
59+
}
60+
61+
@Override
62+
public boolean hasNext() {
63+
return delegate.hasNext();
64+
}
65+
66+
@Override
67+
public K next() {
68+
return delegate.next().getKey();
69+
}
70+
71+
@Override
72+
public void remove() {
73+
delegate.remove();
74+
}
75+
}
7076
}

0 commit comments

Comments
 (0)