我需要对包含double值的数组的INDEXES进行排序。排序应按升序进行。我这样做的方式如下(见下文)。如果数组包含整数值,它可以正常工作,但它停止使用double值。为什么?请注意我正在排序索引,而不是数组的值。
结果应为[1,0]
,即[893.05,1129.25]
。
double[] times = new double[2];
times[0] = 1129.25;
times[1] = 893.05;
ArrayIndexComparator comparator = new ArrayIndexComparator(times,0);
Integer[] sortedTimes = comparator.createIndexArray();
Arrays.sort(sortedTimes, comparator);
public class ArrayIndexComparator implements Comparator<Integer>
{
private double[] array;
private int sort;
public ArrayIndexComparator(double[] array, int sort)
{
this.array = array;
this.sort = sort;
}
public Integer[] createIndexArray()
{
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < array.length; i++)
{
indexes[i] = i;
}
return indexes;
}
@Override
public int compare(Integer index1, Integer index2)
{
if (sort == 0)
return Double.compare(array[index2],array[index1]); // descending order ...2,1,0
else
return Double.compare(array[index1],array[index2]); // ascending order 0,1,2,...
}
}
答案 0 :(得分:1)
在自定义比较器的compare
方法中,由于您在构造函数的调用中将sort
字段设置为0
,因此按降序排序。
只需将0
替换为ArrayIndexComparator comparator = new ArrayIndexComparator(times,0);
e.g。 ArrayIndexComparator comparator = new ArrayIndexComparator(times,1);
答案 1 :(得分:0)
我没有完全理解你所说的内容,但我得到了你想要只修改比较功能的结果
@Override
public int compare(Integer index1, Integer index2)
{
if (index1<index2){
return 1;
}
else if (index1>index2){
return -1;
}
else{
return 0;
}
}
答案 2 :(得分:0)
ArrayIndexComparator comparator = new ArrayIndexComparator(times,1);
使用上面的(传递1指示升序排序),我按升序获得正确的值。
测试代码
for(Integer op : sortedTimes)
{
System.out.println(times[op]);
}
输出
893.05
1129.25