如何对彼此配对的数组进行排序? 例如,如果您有一系列学生编号和学生姓名。我怎样才能调整学生姓名。当你按学号排序时?
我想成为的示例输出:
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]);
}
答案 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