你如何对彼此配对的数组进行排序?

时间:2014-05-23 16:17:58

标签: java arrays sorting

如何对彼此配对的数组进行排序? 例如,如果您有一系列学生编号和学生姓名。我怎样才能调整学生姓名。当你按学号排序时?

我想成为的示例输出:

unsorted:
ID numbers     name     course
5             jomar     IT
3             karen     CS

sorted (by ID numbers)
ID numbers     name     course
3             karen     CS
5             jomar     IT

我试过使用TreeMap,但是这个问题是如果ID号的值相同,它将覆盖另一个,它将打印成这样:

sorted (by ID numbers)
ID numbers     name     course
3             karen     CS

回复Stultuske 我试图使用1个包含id num,name,course的数组。 它是这样的:

 for(int i=0;i<array.length;i++){
     String [][] storeAllArray = {{array[i]},{array2[i]},{array3[i]}};
     System.out.println(storeAllArray[0][0] + " " 
                      + storeAllArray[1][0] + " "
                      + storeAllArray[2][0]);
 }  

3 个答案:

答案 0 :(得分:1)

public class Student implements Comparable {
    private int id;
    private String name;
    private String course;

    public Student(int pid, int pname, int pcourse) {
        id = pid;
        name = pname;
        course = pcourse;
    }

    @Override
    public int compareTo(Object o) {
        return new Integer(id).compareTo(new Integer(((Student)o).getID()));
    }

    public int getID() { return id; }
    public String getName() { return name; }
    public String getCourse() { return course; }
}

此时,您只需创建一个ArrayList(或您喜欢的任何集合),并致电Collections.sort(~initialized ArrayList~);

答案 1 :(得分:0)

如果你有Collection<Student>,你可以这样排序:

Collections.sort(studentList,new Comparator<Student>() { 
  int compareTo(Student s1, Student s2) { 
     return s1.getSomeField().compareTo(s2.getSomeField());
  )
});

基本上,您将Comparator(在此处生成内联)传递给Collections.sort()

我强烈推荐使用并行阵列版本,因为它确实避免了Java的OO特性。

但如果真的想要这样做,你必须有一个第三个数组,它只是数组中1到数量元素的索引,那么你必须使用一个并行索引数组,并使用Arrays.sort()和比较并行数组的值(而不是索引数组)的比较器对它进行排序,然后对已排序的索引数组进行迭代,并打印出与其他索引匹配的元素数组......如上所述,这样做真的好得多。

答案 2 :(得分:0)

第1部分:将比较器定义如下:

public class MyComparator implements Comparator<Object[]> {

    @Override
    public int compare( Object[] o1, Object[] o2 ) {
        if ( (int) o1[0] > (int) o2[0] )
            return 1;
        else if ( !((int) o1[0] > (int) o2[0]) )
            return -1;
        else
            return 0;
    }

}

第2部分:然后在main课程中按照下面的示例代码进行操作:

public class MyComparatorTest {

    public static void main( String[] args ) {


    List<Object[]> list = new ArrayList<Object[]>();

    Object[] o = new Object[3];
    o[0] = 2;
    o[1] = "TWO";
    o[2] = "RR";
    list.add(o);

    o = new Object[3];
    o[0] = 3;
    o[1] = "THREE";
    o[2] = "GG";
    list.add(o);

    o = new Object[3];
    o[0] = 1;
    o[1] = "ONE";
    o[2] = "TT";
    list.add(o);

    // This sorts your list
    Collections.sort(list, new MyComparator());

    // The following loop is only to show you the sorted list content. 
    for (Object[] obj : list) {
        for (Object obj2 : obj) {
            System.out.print(" " + obj2);
        }
        System.out.println();
    }

    }

}

示例输出为:

 1 ONE TT
 2 TWO RR
 3 THREE GG