我需要使用PriorityQueue对Person对象进行排序。优先级队列排序字符串
Person类:
public class Person implements Comparable<Person>{
private String firstName;
private String lastName;
public Person(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {return firstName;}
public String getLastName() {return lastName;}
public String toString(){
return "Name: " + firstName + " " + lastName + "\n";
}
public int compareTo(Person p){
String pname1 = firstName + lastName;
String pname2 = p.firstName + p.lastName;
return pname1.compareTo(pname2);
}
的主要代码:
import java.util.PriorityQueue;
public class priorityQ{
public static void main(String[] args){
PriorityQueue<Person> pers = new PriorityQueue<Person>();
pers.add(new Person("Sam", "Smith"));
pers.add(new Person("Charlie", "Black"));
pers.add(new Person("Betty", "Brown"));
pers.add(new Person("Jessica", "Stewart"));
pers.add(new Person("John", "Friday"));
pers.add(new Person("Frank", "Folcy"));
System.out.print(pers);
}
}
我需要:
- 打印照片,无需排序(在主已经完成)
- 排序姓氏
- 按名排序,然后姓氏
我不能在Person类中更改任何代码。
我创建新类:
import java.util.Comparator;
public class LastNameComparator implements Comparator<Person>{
public int compareTo(Person a, Person b){
Person p1 = (Person)a;
Person p2 = (Person)b;
if(p1.getLastName().equals(p2.getLastName()))
{
return p1.getFirstName().compareTo(p2.getFirstName());
}
return p1.getLastName().compareTo(p2.getLastName());
}
}
它有一个编译错误:
LastNameComparator.java:2: error: LastNameComparator is not abstract and does not override abstract method compare(Person,Person) in Comparator
你还需要使用'PriorityQueue'吗? –
做错误信息告诉你:'不重写compare(Person,Person)' - 你把它命名为compareTo – EGOrecords
@Override Annotation会告诉你错误,因为compareTo不会覆盖任何东西。 – EGOrecords