diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/query/knn/KNNUtil.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/database/query/knn/KNNUtil.java | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/query/knn/KNNUtil.java b/src/de/lmu/ifi/dbs/elki/database/query/knn/KNNUtil.java index 1179edb5..01deeaa0 100644 --- a/src/de/lmu/ifi/dbs/elki/database/query/knn/KNNUtil.java +++ b/src/de/lmu/ifi/dbs/elki/database/query/knn/KNNUtil.java @@ -23,7 +23,6 @@ package de.lmu.ifi.dbs.elki.database.query.knn; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.AbstractCollection; import java.util.AbstractList; import java.util.Iterator; import java.util.List; @@ -31,6 +30,7 @@ import java.util.List; import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs; import de.lmu.ifi.dbs.elki.database.ids.DBID; import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; @@ -49,7 +49,7 @@ public final class KNNUtil { * * @param <D> Distance */ - protected static class KNNSubList<D extends Distance<D>> extends AbstractCollection<DistanceResultPair<D>> implements KNNResult<D> { + protected static class KNNSubList<D extends Distance<D>> extends AbstractList<DistanceResultPair<D>> implements KNNResult<D> { /** * Parameter k */ @@ -240,6 +240,18 @@ public final class KNNUtil { public DBID getDBID() { return cur.getDBID(); } + + @Override + public boolean sameDBID(DBIDRef other) { + return getIntegerID() == other.getIntegerID(); + } + + @Override + public int compareDBID(DBIDRef o) { + final int thisVal = getIntegerID(); + final int anotherVal = o.getIntegerID(); + return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1)); + } } /** @@ -284,9 +296,9 @@ public final class KNNUtil { } @Override - public boolean contains(DBID o) { - for(DBID id : this) { - if(id.equals(o)) { + public boolean contains(DBIDRef o) { + for (DBIDIter iter = iter(); iter.valid(); iter.advance()) { + if(iter.sameDBID(o)) { return true; } } @@ -304,7 +316,7 @@ public final class KNNUtil { */ @Override @Deprecated - public int binarySearch(DBID key) { + public int binarySearch(DBIDRef key) { throw new UnsupportedOperationException("Since the result is usually not sorted, a binary Search does not make sense!"); } } |