Java - 类数据类型 - 排序问题

标签 java arrays algorithm sorting comparable

假设我实现了一个 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/

相关文章:

java - 单击按钮时发送 Gmail,而不使用 Intent

java - 如何制作二维数组并打印它们

algorithm - 如何组合不同的二维码以获得新的二维码

Javascript 数组未定义

algorithm - 从 n0 初始帧开始,每 N 帧采样一次视频

java - 我如何创建一个递归的 Anagram 工具来打印一串字母的所有可能组合,包括前缀?

java - Spark Task Executors工作时如何在Java并发Java List中存储多个json对象

java - 如果我们可以使用@With注解直接进行 Action 组合,那么为什么我们需要使用接口(interface)创建自定义注解呢?

java - 绘制字符串时绘制任意多边形而不是某些字符

c - 结构变量中的数组成员