我有两个int [],Start和End。它们引用一系列行:Start [0]是第0行的起始位置,End [0]是第0行的结束位置。我想按升序对Start进行排序,然后以相同的方式对End进行排序,所以阵列保持一致。
在MatLab中,你可以这样做:
[idx,StartSorted] = sort(Start); EndSorted =结束(idx);
在Java中执行相同操作的最佳方法是什么?写一个元组课,还是有更好的方法?
一般来说,操作这样的配对数据的最佳方法是什么?
Thak你。
谢谢你们,这太棒了。
答案 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
方法指定的顺序进行排序。在此特定情况下,您的比较将仅基于start
中Tuple
的值。
如果您不太关心通过实施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)