假设我实现了一个 Edge 类,它有 4 个属性,所有属性都是 int 类型: from
to
quality
长度
。
在我的程序中,我创建了一个 Edge[]
数组。
我想实现 2 个排序参数 -
其中一个将按质量
的降序对 Edge 数组进行排序,
另一个将根据长度
的递增顺序进行排序。
我将需要在我的代码的不同部分进行这两种排序。
我将使用库函数 Arrays.sort()
进行排序。
我所知道的对类数据类型数组进行排序以在类 Edge 中实现 compareTo()
的唯一方法,但这只适用于一个参数(质量或长度,但不能同时适用于两者)。
如何实现两个排序函数(2 个 compareTo()
函数?)并决定在排序过程中调用哪一个?在C++中,我们可以制作很多比较函数,并简单地说明要经过的函数。在Java中如何实现?
注意:我的目标是使用 Arrays.sort()
对 DataType Edge 数组进行排序,并使用两个不同的参数进行排序并决定在哪个点使用哪个参数。
最佳答案
您创建两个单独的Comparator
实现来执行您描述的算法。然后您可以将适当的实例传递给 Collections.sort
。
public class EdgeCompareLength implements Comparator<Edge>{
@Override
public int compare(Edge o1, Edge o2) {
// your implementation here
return 0;
}
}
public class EdgeCompareProperties implements Comparator<Edge>{
@Override
public int compare(Edge o1, Edge o2) {
// your implementation here
return 0;
}
}
所以你会在某个地方
List<Edge> edges = getEdges();
Collections.sort(edges,new EdgeCompareLength());
List<Edge> moreEdges = getMoreEdges();
Collections.sort(edges,new EdgeCompareProperties();
关于Java - 类数据类型 - 排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29546953/