java优先级队列排序字符串
我需要使用PriorityQueue对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
# 1 楼答案
首先,您必须从
person class
及其所有实现中删除comparable interface
: 试着这样做:在
main method
中,按姓氏排序执行以下操作:# 2 楼答案
首先: 请移开
及
从个人类,因为你不大声做任何改变
第二: 比较器类只有compare(tob1,t2ob2)方法,没有公共int compareTo(persona,personb)。 所以请创建compare(tob1,t2ob2)并将@Override注释放在上面,以确保您做的一切都是正确的
所以毕竟在你的比较器类中
代码的其余部分看起来很好,从快速查看