diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-09-09 15:38:24 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-09-09 15:38:24 +0200 |
commit | 5381ce1b3f336a09ecf8fe6e991d1fa2b12282d6 (patch) | |
tree | a42339317e7f11ae54523d140ec320987ace14db | |
parent | dd25c2a3c4c16ba96eda61e996f5347f1f8eaa9c (diff) |
Removing elements from an array is very costly.
Make a new one and copy the ones to keep instead.
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/result/Hit.java | 1 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/result/HitGroup.java | 9 |
2 files changed, 8 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/result/Hit.java b/container-search/src/main/java/com/yahoo/search/result/Hit.java index 10fa7d24d1a..13f0dc1c007 100644 --- a/container-search/src/main/java/com/yahoo/search/result/Hit.java +++ b/container-search/src/main/java/com/yahoo/search/result/Hit.java @@ -625,7 +625,6 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi } /** Compares this hit to another hit */ - @SuppressWarnings("deprecation") @Override public int compareTo(Hit other) { // higher relevance is before diff --git a/container-search/src/main/java/com/yahoo/search/result/HitGroup.java b/container-search/src/main/java/com/yahoo/search/result/HitGroup.java index 9ecd6513a94..a12a2566f68 100644 --- a/container-search/src/main/java/com/yahoo/search/result/HitGroup.java +++ b/container-search/src/main/java/com/yahoo/search/result/HitGroup.java @@ -501,10 +501,17 @@ public class HitGroup extends Hit implements DataList<Hit>, Cloneable, Iterable< currentIndex++; if (currentIndex < offset || currentIndex >= highBound) { - i.remove(); handleRemovedHit(hit); } } + if ((offset > 0) || (hits.size() > highBound)) { + ListenableArrayList<Hit> newHits = new ListenableArrayList<>(numHits); + for (int index = offset; index < Math.min(highBound, hits.size()); index++) { + newHits.add(hits.get(index)); + } + hits = newHits; + unmodifiableHits = Collections.unmodifiableList(hits); + } } /** |