diff --git a/src/mhtree/BuildTree.java b/src/mhtree/BuildTree.java index 961126ee5513ae9819e36720be28043dccc0bcb6..c32fcd0ea5ed9bfcb88ae927327eb40249eacd5e 100644 --- a/src/mhtree/BuildTree.java +++ b/src/mhtree/BuildTree.java @@ -65,7 +65,7 @@ class BuildTree { while (!notProcessedNodeIndices.isEmpty()) { if (notProcessedNodeIndices.cardinality() < arity) { - Set<Integer> nodeIndices = new HashSet<>(); + Set<Integer> nodeIndices = new HashSet<>(notProcessedNodeIndices.cardinality() - 1); int mainNodeIndex = notProcessedNodeIndices.nextSetBit(0); notProcessedNodeIndices.stream().skip(1).forEach(nodeIndices::add); @@ -78,7 +78,7 @@ class BuildTree { int furthestNodeIndex = getFurthestIndex(nodeDistances, notProcessedNodeIndices); notProcessedNodeIndices.clear(furthestNodeIndex); - Set<Integer> nnNodeIndices = new HashSet<>(); + Set<Integer> nnNodeIndices = new HashSet<>(arity - 1); for (int i = 0; i < arity - 1; i++) { int index = objectDistances.minDistInArrayExceptIdx(nodeDistances[furthestNodeIndex], notProcessedNodeIndices, furthestNodeIndex); @@ -104,7 +104,7 @@ class BuildTree { return; } - List<LocalAbstractObject> objects = new ArrayList<>(); + List<LocalAbstractObject> objects = new ArrayList<>(leafCapacity); // Select a base object int furthestIndex = getFurthestIndex(objectDistances.getDistances(), notProcessedObjectIndices); @@ -149,12 +149,12 @@ class BuildTree { } private Set<LocalAbstractObject> findClosestObjects(int baseObjectIndex, int numberOfObjects, BitSet notProcessedIndices) { - List<Integer> objectIndices = new ArrayList<>(); + List<Integer> objectIndices = new ArrayList<>(1 + numberOfObjects); objectIndices.add(baseObjectIndex); return IntStream.range(0, numberOfObjects).mapToObj(i -> { - HashMap<Integer, Float> indexToDistance = new HashMap<>(); + HashMap<Integer, Float> indexToDistance = new HashMap<>(objectIndices.size()); for (int index : objectIndices) { int nnIndex = objectDistances.minDistInArray(objectDistances.getDistances(index), notProcessedIndices); diff --git a/src/mhtree/LeafNode.java b/src/mhtree/LeafNode.java index d4c92824a2423dca306c1cb400a8bc4299a5160c..bc36cbd2a8407b603281f5ddd18fe5069f857bcf 100644 --- a/src/mhtree/LeafNode.java +++ b/src/mhtree/LeafNode.java @@ -31,7 +31,7 @@ public class LeafNode extends Node implements Serializable { } public Set<LocalAbstractObject> getObjects() { - Set<LocalAbstractObject> objects = new HashSet<>(); + Set<LocalAbstractObject> objects = new HashSet<>(bucket.getObjectCount()); for (AbstractObjectIterator<LocalAbstractObject> it = bucket.getAllObjects(); it.hasNext(); ) objects.add(it.next());