public class OrderedTuple extends Object implements Comparable<OrderedTuple>
Ordering is done by encoding all components of the Tuple into a
single scalar value and using this value as the sorting
key. Encoding is performed using the method invented by Georg
Cantor in 1877 when he proved it was possible to establish a
bijection between a line and a plane. The binary representations of
the components of the Tuple are mixed together to form a single
scalar. This means that the 2^{k} bit of component 0 is
followed by the 2^{k} bit of component 1, then by the
2^{k} bit of component 2 up to the 2^{k} bit of
component t
, which is followed by the 2^{k1}
bit of component 0, followed by the 2^{k1} bit of
component 1 ... The binary representations are extended as needed
to handle numbers with different scales and a suitable
2^{p} offset is added to the components in order to avoid
negative numbers (this offset is adjusted as needed during the
comparison operations).
The more interesting property of the encoding method for our purpose is that it allows to select all the points that are in a given range. This is depicted in dimension 2 by the following picture:
This picture shows a set of 100000 random 2D pairs having their first component between 50 and +150 and their second component between 350 and +50. We wanted to extract all pairs having their first component between +30 and +70 and their second component between 120 and 30. We built the lower left point at coordinates (30, 120) and the upper right point at coordinates (70, 30). All points smaller than the lower left point are drawn in red and all points larger than the upper right point are drawn in blue. The green points are between the two limits. This picture shows that all the desired points are selected, along with spurious points. In this case, we get 15790 points, 4420 of which really belonging to the desired rectangle. It is possible to extract very small subsets. As an example extracting from the same 100000 points set the points having their first component between +30 and +31 and their second component between 91 and 90, we get a subset of 11 points, 2 of which really belonging to the desired rectangle.
the previous selection technique can be applied in all dimensions, still using two points to define the interval. The first point will have all its components set to their lower bounds while the second point will have all its components set to their upper bounds.
Tuples with negative infinite or positive infinite components are sorted logically.
Since the specification of the Comparator
interface
allows only ClassCastException
errors, some arbitrary
choices have been made to handle specific cases. The rationale for
these choices is to keep regular and consistent Tuples
together.
Double.NaN
components are sorted
after all other ones (even after instances with positive infinite
componentsDouble.NaN
componentsConstructor and Description 

OrderedTuple(double... components)
Build an ordered Tuple from its components.

Modifier and Type  Method and Description 

int 
compareTo(OrderedTuple ot)
Compares this ordered Tuple with the specified object.

boolean 
equals(Object other) 
double[] 
getComponents()
Get the components array.

int 
hashCode() 
public OrderedTuple(double... components)
components
 double components of the Tuplepublic int compareTo(OrderedTuple ot)
The ordering method is detailed in the general description of the class. Its main property is to be consistent with distance: geometrically close Tuples stay close to each other when stored in a sorted collection using this comparison method.
Tuples with negative infinite, positive infinite are sorted logically.
Some arbitrary choices have been made to handle specific cases. The rationale for these choices is to keep normal and consistent Tuples together.
Double.NaN
components are sorted
after all other ones (evan after instances with positive infinite
componentsDouble.NaN
componentscompareTo
in interface Comparable<OrderedTuple>
ot
 Tuple to compare instance withpublic double[] getComponents()
Copyright © 2003–2014 The Apache Software Foundation. All rights reserved.