我正在使用Java比较器来比较具有点(x,y)的位置对象。
我需要能够比较两个点以检索正整数或负整数,这将允许我对(x,y)点进行排序,其中x值首先排序,然后y值排序。 (如果有道理...) 例如,这:
(3,4) (2,5) (1,1) (1,3) (3,3)
成为这个:
(1,3) (2,5) (3,4)
我想做的一种方法实质上是通过将x值乘以1000这样的大数来赋予x值较大的优先级。就像这样: 比较(3,3)和(1,1):
int x_multiplier = 1000;
int value1 = (p1.x * x_multiplier ) + p1.y; // = 3 * 1000 + 3 = 3003
int value2 = (p2.x * x_multiplier ) + p2.y; // = 1 * 1000 + 1 = 1001
return value1-value2; // = 2002. Value1 is greater,thus p1 be later in list.
这可行,但问题在于如果Y值等于或大于x_multiplier,则分解(因为y值现在等于1个x值...再次,如果有道理。)
// Comparing p1 = (2,0) & p2 = (1,18)
int x_multiplier = 10;
int value1 = (p1.x * x_multiplier ) + p1.y; // = 2 * 10 + 0 = 20
int value2 = (p2.x * x_multiplier ) + p2.y; // = 1 * 10 + 18 = 28
return value1-value2; // = -8,value2 is greater,and thus p2 will be later in the list. However,we know by looking at the points that p2 should come first.
我什至不知道如何搜索,所以如果那里没有答案,我找不到它们。