加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在java中对元组列表进行排序的有效方法

发布时间:2020-12-15 04:37:27 所属栏目:Java 来源:网络整理
导读:给定的通用数据类型看起来像这样:HashMap EdgeTuple,Double edgeList其中tuple是一个EdgeTuple类,Double是一个对任务不重要的权重: class EdgeTuple{ int label1; int label2; public EdgeTuple(int label1,int label2){ int min = Math.min(label1,label2
给定的通用数据类型看起来像这样:HashMap< EdgeTuple,Double> edgeList其中tuple是一个EdgeTuple类,Double是一个对任务不重要的权重:

class EdgeTuple{
    int label1;
    int label2;
    public EdgeTuple(int label1,int label2){
        int min = Math.min(label1,label2);
        int max = Math.max(label1,label2);
        this.label1 = min;
        this.label2 = max;
    }
}

因此,您可以看到元组已经在第一个位置上具有较小的值.我想要做的是对最终输入顺序应该如下所示的列表进行排序:

条目0:[(0,某事物); some_weight]

第1项:[(1,某事); some_weight]

条目n-1:[(last_value,something); some_weight]

所以基本上我需要做的是对元组的第一个值进行升序排序.
我对这个主题的红色最喜欢的现有答案,但仍然找不到令人满意的东西.

一种可能的解决方案是依靠比较器,如下所示:

Comparator<Tuple> myComparator = new Comparator<Tuple>() {
    public int compare(Tuple t1,Tuple t2) {
        //the comparison rules go here
    }
};
Collections.sort(tupleList,myComparator);

每对元组的比较似乎并不安静.所以我的问题是,您是否知道其他任何排序方式?也许一些新的数据类型为给定的任务提供了一个合适的更高性能的接口?

谢谢

解决方法

您可以在EdgeTuple中实现Comparable接口:

public static class EdgeTuple  implements Comparable<EdgeTuple> {
    int label1;
    int label2;
    public EdgeTuple(int label1,label2);
        this.label1 = min;
        this.label2 = max;
    }


    @Override
    public int compareTo(EdgeTuple o) {
        return this.label1 - o.label1;
    }
}

并使用TreeMap存储元组的预分类映射,不要每次都对它进行排序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读