@Override public void findNearest(double[] target, double maxDistance, int numNeighbors, FastQueue<NnData<double[]>> results) { results.reset(); PriorityQueue<HeapItem> heap = search(target, maxDistance < 0 ? Double.POSITIVE_INFINITY : Math.sqrt(maxDistance), numNeighbors); while (!heap.isEmpty()) { final HeapItem heapItem = heap.poll(); NnData<double[]> objects = new NnData<>(); objects.index = indexes.get(heapItem.index); objects.point = items[heapItem.index]; objects.distance = heapItem.dist * heapItem.dist; // squared distance is expected results.add(objects); } results.reverse(); }
@Override public void findNearest(double[] target, double maxDistance, int numNeighbors, FastQueue<NnData<double[]>> results) { results.reset(); PriorityQueue<HeapItem> heap = search(target, maxDistance < 0 ? Double.POSITIVE_INFINITY : Math.sqrt(maxDistance), numNeighbors); while (!heap.isEmpty()) { final HeapItem heapItem = heap.poll(); NnData<double[]> objects = new NnData<>(); objects.index = indexes.get(heapItem.index); objects.point = items[heapItem.index]; objects.distance = heapItem.dist * heapItem.dist; // squared distance is expected results.add(objects); } results.reverse(); }