我尝试过这样的解决方案,它根据您的要求使用 Arraylist :
首先,我为您的操作创建了一个新的数据结构。因为每个值将包含两个城市名称:
public class Citizen implements Comparable<Citizen> {
private int citizenId;
private String subjectOne;
private String subjectTwo;
public Citizen(int rollNumber, String subjectOne, String subjectTwo){
this.citizenId = rollNumber;
this.subjectOne = subjectOne;
this.subjectTwo = subjectTwo;
}
public int getRollNumber() {
return citizenId;
}
public void setRollNumber(int rollNumber) {
this.citizenId = rollNumber;
}
public String getSubjectOne() {
return subjectOne;
}
public void setSubjectOne(String subjectOne) {
this.subjectOne = subjectOne;
}
public String getSubjectTwo() {
return subjectTwo;
}
public void setSubjectTwo(String subjectTwo) {
this.subjectTwo = subjectTwo;
}
public int compareTo(Citizen comparestu) {
int compareage=((Citizen)comparestu).getRollNumber();
/* For Ascending order*/
return this.citizenId-compareage;
/* For Descending order do like this */
//return compareage-this.studentage;
}
@Override
public String toString() {
return "[ rollno=" + citizenId + ", subjectOne=" + subjectOne + ", subjectTwo=" + subjectTwo + "]";
}
}
正如您在此处看到的,用于比较的参数是使用 Comparable 接口实现的CitizenID。
现在打电话:
public static void main(String[] args) {
ArrayList<Citizen> studentList = new ArrayList<Citizen>();
studentList.add(new Citizen(25, "New York", "New Jersey"));
studentList.add(new Citizen(20, "Detroit", "Atlanta"));
studentList.add(new Citizen(50, "Chicago", "Los Angeles"));
studentList.add(new Citizen(30, "Kolkata", "Delhi"));
studentList.add(new Citizen(12, "Munmbai", "Baranasi"));
studentList.add(new Citizen(11, "Bangalore", "Goa"));
Collections.sort(studentList);
for(Citizen student: studentList){
System.out.println(student);
}
}
输出:
[ rollno=11, subjectOne=Bangalore, subjectTwo=Goa]
[ rollno=12, subjectOne=Munmbai, subjectTwo=Baranasi]
[ rollno=20, subjectOne=Detroit, subjectTwo=Atlanta]
[ rollno=25, subjectOne=New York, subjectTwo=New Jersey]
[ rollno=30, subjectOne=Kolkata, subjectTwo=Delhi]
[ rollno=50, subjectOne=Chicago, subjectTwo=Los Angeles]