Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试对ArrayList中的ArrayList进行排序_Java_Arraylist - Fatal编程技术网

Java 正在尝试对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(

尝试对包含以下内容的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(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处的值