package mil.nga.giat.geowave.analytic.mapreduce.nn; public class NNData<T> implements Comparable<NNData<T>> { private T neighbor; private double distance; public NNData() {} public NNData( final T neighbor, final double distance ) { super(); this.neighbor = neighbor; this.distance = distance; } public double getDistance() { return distance; } public void setDistance( final double distance ) { this.distance = distance; } protected T getNeighbor() { return neighbor; } protected void setNeighbor( final T neighbor ) { this.neighbor = neighbor; } @Override public int hashCode() { final int prime = 31; int result = 1; long temp; temp = Double.doubleToLongBits(distance); result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + ((neighbor == null) ? 0 : neighbor.hashCode()); return result; } @Override public boolean equals( Object obj ) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; @SuppressWarnings("unchecked") NNData<T> other = (NNData<T>) obj; if (Double.doubleToLongBits(distance) != Double.doubleToLongBits(other.distance)) return false; if (neighbor == null) { if (other.neighbor != null) return false; } else if (!neighbor.equals(other.neighbor)) return false; return true; } @Override public int compareTo( NNData<T> otherNNData ) { final int dist = Double.compare( distance, otherNNData.distance); // do not care about the ordering based on the neighbor data. // just need to force some ordering if they are not the same. return dist == 0 ? hashCode() - otherNNData.hashCode() : dist; } }