似乎我误解了“可比较”的东西 - 我以为我可以通过制作compareTo(Person person)方法来覆盖Arrays.sort() - 我到底错过了什么?
我认为Arrays.sort会使用我的Person []并使用我的compareTo(Person person)方法对其进行排序?
如果我完全偏离正轨 - 有人会朝着正确的方向推动我吗??
import java.util.*;
public class Person implements Comparable<Person>{
protected String surname;
protected String givenName;
//Constructor for my "Person" objects
protected Person(String aSurname, String aGivenName){
surname=aSurname;
givenName=aGivenName;
}
public static void main(String[] args){
//A string of Person objects
Person[] arrayOfPersons=new Person[6];
arrayOfPersons[0]=new Person("Kangasniemi","Jerri");
arrayOfPersons[1]=new Person("Kangasniemi","Jukka");
arrayOfPersons[2]=new Person("Kangasniemi","Jessicka");
arrayOfPersons[3]=new Person("Kangasniemi","Johan");
arrayOfPersons[4]=new Person("Kangasniemi","Joakim");
arrayOfPersons[5]=new Person("Virtamo","Nina");
Arrays.sort(arrayOfPersons);
for (int i = 0; i < arrayOfPersons.length; i++) {
System.out.println(arrayOfPersons[i].toString());
}
}
@Override
public String toString(){
return givenName+" "+surname;
}
@Override
public int compareTo(Person person) {
String personOne="";
String personTwo="";
personOne=this.toString();
String[] personOneString=personOne.split(" ");
personTwo=person.toString();
String[] personTwoString=personTwo.split(" ");
if (personOneString[1]==personTwoString[1]) {
if (personOneString[0]==personTwoString[0]) {
return 0;
} else if(personOneString[0].compareToIgnoreCase(personTwoString[0])<0){
return -1;
} else{
return 1;
}
}else if(personOneString[1].compareToIgnoreCase(personTwoString[1])<0){
return -1;
}else{
return 1;
}
}
}
答案 0 :(得分:2)
@Override
public int compareTo(Person person) {
int rv = this.givenName.compareToIgnoreCase(person.givenName);
if (rv != 0) return rv;
else return this.surname.compareToIgnoreCase(person.surname);
}
答案 1 :(得分:1)
尝试这样的事情:
public class Person implements Comparable<Person>{
protected String surname;
protected String givenName;
//Constructor for my "Person" objects
protected Person(String aSurname, String aGivenName){
surname=aSurname;
givenName=aGivenName;
}
public String getSurname() {
return surname;
}
public String getGivenName() {
return givenName;
}
public static void main(String[] args) {
Person[] arrayOfPersons=new Person[6];
arrayOfPersons[0]=new Person("Kangasniemi","Jerri");
arrayOfPersons[1]=new Person("Kangasniemi","Jukka");
arrayOfPersons[2]=new Person("Kangasniemi","Jessicka");
arrayOfPersons[3]=new Person("Kangasniemi","Johan");
arrayOfPersons[4]=new Person("Kangasniemi","Joakim");
arrayOfPersons[5]=new Person("Virtamo","Nina");
Arrays.sort(arrayOfPersons);
for (int i = 0; i < arrayOfPersons.length; i++) {
System.out.println(arrayOfPersons[i].toString());
}
}
@Override
public String toString(){
return givenName+" "+surname;
}
@Override
public int compareTo(Person person) {
int surnameComparison = this.surname.compareToIgnoreCase(person.getSurname());
if(surnameComparison == 0){
return this.givenName.compareToIgnoreCase(person.getGivenName());
}
return surnameComparison;
}
但请记住,在 compareTo 方法 this.surname , this.givenName , person , person.getSurename()和 person.getGivenName()不能(或返回)为null!