按相同标准对两个int []进行排序

时间:2015-03-27 22:46:20

标签: java arrays sorting

我有两个int [],Start和End。它们引用一系列行:Start [0]是第0行的起始位置,End [0]是第0行的结束位置。我想按升序对Start进行排序,然后以相同的方式对End进行排序,所以阵列保持一致。

在MatLab中,你可以这样做:

[idx,StartSorted] = sort(Start); EndSorted =结束(idx);

在Java中执行相同操作的最佳方法是什么?写一个元组课,还是有更好的方法?

一般来说,操作这样的配对数据的最佳方法是什么?

Thak你。


谢谢你们,这太棒了。

2 个答案:

答案 0 :(得分:5)

不要使用两个int数组。使用Line单个数组,其中Line将是具有start属性和end属性的类。

然后,按照开头(在Java 8中)对行进行排序:

Arrays.sort(lines, Comparator.comparingInt(Line::getStart));

答案 1 :(得分:3)

正如您所说,最好的方法是创建一个维持两个值的Tuple类。您还应该实施equals并使您的班级实施Comparable<T>并实施compareTo。完成后,您可以对Tuple个实例的集合进行排序(使用Collections.sort),它们将根据您的compareTo方法指定的顺序进行排序。在此特定情况下,您的比较将仅基于startTuple的值。

如果您不太关心通过实施Comparable<T>为您的班级定义隐式排序,您可以使用Comparator#comparingInt指定一个ad-hoc比较器并将其与您的数组一起使用对象:

//tuples is an array
//Tuple::getStart is a method reference to the getStart method
//in tuple. So you get an ad-hoc comparator that uses this
//function as the basis for ordering
Arrays.sort(tuples, Comparator.comparingInt(Tuple::getStart)