有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的多重排序算法(在排序字段中排序)

ArrayList数据示例: BJM 300 AC4507 TOM_JONES,BDM 290 DC4058 ALAN_FIELD,ADG 350 BA3240 JON_THORN

我需要将上面的ArrayList按第三列第二列第三列第二列的升序排序

 public static ArrayList sortLoad1(ArrayList<WorkLoad> loads){
    String s1, s2;
    WorkLoad temp;                                     //Some local variables
    for(int i = 0 ; i < loads.size(); i++){            //Loop forward
        for(int j = loads.size()-1; j>i  ;j--){        //Loop backward
            s1 = loads.get(j-1).getDeptCode();         //Extract 1st
            s2 = loads.get(j).getDeptCode();           //Extract 2nd
            if(i+1<loads.size()&&s1.compareTo(s2)>-1){ //Compare them lexicographically
                temp = loads.get(j-1);
                //If s1 follows s2 then switch both
                loads.set(j-1, loads.get(j));
                loads.set(j, temp);
            }//endif
        }//end loop 2
    }//end loop 1
    return loads;
} 

以上是我在ATM机上的代码。这会对第一列(BJM、BDM和ADG列)进行排序,但是我需要做什么才能在我上面提到的排序数据中进行排序呢??我想了三次分类,但这行不通,是吗

我尝试过下面提到的嵌套排序(见下文),但没有乐趣:

    public static ArrayList sortLoad1(ArrayList<TeachingLoad> loads){
    String s1, s2;
    TeachingLoad temp;                                   //Some local variables
    for(int i = 0 ; i < loads.size(); i++){              //Loop throuth 
        for(int j = loads.size()-1; j>i  ;j--){          //Loop through 
            s1 = loads.get(j-1).getLecturerID();        //Extract 1st
            s2 = loads.get(j).getLecturerID();          //Extract 2nd
                if(i+1<loads.size()&&s1.compareTo(s2)>-1){  //Compare them lexicographically
                    temp = loads.get(j-1);
                    //If s1 follows s2 then switch both
                    loads.set(j-1, loads.get(j));
                    loads.set(j, temp);
                }
                else{
                    for(int k = 0 ; k < loads.size(); k++){            
                        for(int l = loads.size()-1; l>i  ;l--){     
                            s1 = loads.get(l-1).getDepartmentNumber();
                            s2 = loads.get(l).getDepartmentNumber();
                            if(k+1<loads.size()&&s1.compareTo(s2)>-1){
                                temp = loads.get(l-1);
                                loads.set(l-1, loads.get(l));
                                loads.set(l, temp);
                            }
                            else{
                                for(int m = 0 ; m < loads.size(); m++){         
                                    for(int n = loads.size()-1; n>i  ;n--){         
                                        s1 = loads.get(n-1).getSchoolCode();
                                        s2 = loads.get(n).getSchoolCode();
                                        if(m+1<loads.size()&&s1.compareTo(s2)>-1){
                                            temp = loads.get(n-1);
                                            loads.set(n-1, loads.get(n));
                                            loads.set(n, temp);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
        }//end loop 2
    }//end loop 1
    return loads;
}

共 (1) 个答案

  1. # 1 楼答案

    你需要把这些种类都套起来

    基本上做第一个比较。如果结果不是0,则使用该结果

    如果结果为0,则进行下一次比较。同样,如果结果不是0,则使用它

    您可以根据需要继续此过程进行任意多个嵌套比较

    不过,实现它最简单的方法是作为一个定制的比较器。然后你只需要做Collections.sort(list, comparitor),它就会使用一个合适的算法对列表进行高效快速的排序

    例如,如果您有:

    class X {
       int a, b, c;
    }
    
    Comparator<X> comparator = new Comparator<X>() {
         public int compare(X one, X two) {
             int result = one.a-two.a;
             if (result == 0) {
                 result = one.b-two.b;
                 if (result == 0) {
                      result = one.c-two.c;
                 }
             }
             return result;
         }
    }
    

    这将首先按a、b、c对X列表进行排序

    要使用它,请执行以下操作:

     Collections.sort(list, comparator);