Java 正在尝试对ArrayList中的ArrayList进行排序
尝试对包含以下内容的Arraylist进行排序Java 正在尝试对ArrayList中的ArrayList进行排序,java,arraylist,Java,Arraylist,尝试对包含以下内容的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]] 目前,我已使用 for(int j = 0; j < knowledgeD.size()-1; j++) { if(knowledgeD.get(j).get(0).compareTo(knowledgeD.get(
[[2/11, 11/48], [8/35, 35/288], [16/43, 43/288], [4/5, 5/16], [75/152, 19/210], [135/163, 163/1680]]
目前,我已使用
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);
for(int j=0;j
这对真值进行排序,真值是每个括号中的第一个值,因此,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);
for(int k=0;k
然而,现在我已经实现了这段代码,我不断地得到索引越界错误。有人能帮忙吗
干杯
Sim据我所知,您尝试根据子列表第一个元素的自然顺序对列表进行排序。在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);
比较器顺序=新比较器(){
@凌驾
公共整数比较(列表o1,列表o2){
返回o1.get(0),与(o2.get(0))进行比较;
}
};
集合。排序(知识、顺序);
为什么不使用Comparator?真值的类型是什么?字符串?如何将
compareTo
中的值进行比较?我无法添加额外的方法,因此无法使用Comparator,compareTo比较Bigfraction,这是另一个类中定义的数据类型,该类允许我使用方法compareTo(Bigfraction f)etcAt至少在上一个循环中,您需要将Collections.swap(knowledgeD,k-1,k+1);
替换为Collections.swap(knowledgeD,k,k+1);
。当k=0时,如果条件匹配,您将尝试获取索引-1处的值