尝试对包含以下
的Arraylist进行排序[[2/11, 11/48], [8/35, 35/288], [16/43, 43/288], [4/5, 5/16], [75/152, 19/210], [135/163, 163/1680]]
目前我已使用
对此Arraylist进行了排序for(int j = 0; j < knowledgeD.size()-1; j++) {
if(knowledgeD.get(j).get(0).compareTo(knowledgeD.get(j+1).get(0)) == 1) {
Collections.swap(knowledgeD, j, j+1);
这命令真值,这是每个括号中的第一个值,所以,2/11 8/35等等它按照值排序它们,从最小到最大,
然而,我注意到它在中间的某个地方搞砸了,并没有订购4/5和75/132,我无法理解为什么。我试图添加这个故障安全代码来做明显的,
for(int k = 0; k < knowledgeD.size()-3; k++) {
if(knowledgeD.get(k).get(1).compareTo(knowledgeD.get(k+1).get(1)) == -1){
Collections.swap(knowledgeD, k-1, k+1);
然而,由于我已实现此代码,因此我不断获得索引超出范围的错误。任何人都可以伸出援手吗?
干杯,
辛
答案 0 :(得分:1)
据我了解,您尝试根据子列表的第一个元素的自然顺序来排序列表。在java中,这通常由比较器完成,不需要为任何东西添加新方法:
Comparator<List<Comparable>> order = new Comparator<List<Comparable>>() {
@Override
public int compare(List<Comparable> o1, List<Comparable> o2) {
return o1.get(0).compareTo(o2.get(0));
}
};
Collections.sort(knowledgeD, order);