【发布时间】:2017-06-18 08:29:16
【问题描述】:
Given 是一个通用数据类型,看起来像这样: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,something);some_weight]
条目 1:[(1,something);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);
每对元组的比较似乎并不高效。所以我的问题是,你知道其他排序方法吗?也许一些新的数据类型可以为给定的任务提供更合适的性能接口?
谢谢
【问题讨论】:
-
那么比较器到底有什么问题?
-
ArrayList<EdgeTuple, Double> edgeList在 java 中可能吗? -
ArrayList 只有一个模板参数。你显示两个。
-
比较器由 Collections.sort() 使用的任何排序算法使用。如果该算法为 o(nlogn),那么比较器将被使用多次
-
Collections.sort "这个实现是一个稳定的、自适应的、迭代的mergesort ...这个实现将指定的列表转储到一个数组中,对数组进行排序,然后遍历列表,从对应的重置每个元素在数组中的位置。”如果你想知道为什么要合并排序stackoverflow.com/questions/32334319/…
标签: java performance list sorting tuples