Java 优先级队列排序字符串
我需要使用PriorityQueue对Person对象进行排序 个人类别:Java 优先级队列排序字符串,java,sorting,priority-queue,Java,Sorting,Priority Queue,我需要使用PriorityQueue对Person对象进行排序 个人类别: public class Person implements Comparable<Person>{ private String firstName; private String lastName; public Person(String firstName, String lastName){ this.firstName = firstName;
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);
}
首先:
请移开
implements Comparable<Person>
从个人类,因为你不大声做任何改变
第二:
比较器类只有compare(tob1,t2ob2)方法,没有公共int compareTo(persona,personb)。
所以请创建compare(tob1,t2ob2)并将@Override注释放在上面,以确保您做的一切都是正确的
所以毕竟在你的比较器类中
@Override
public int compare(Person a, Person b){
//..your code
}
其余的代码看起来不错,快速查看…首先,您必须从
person类及其所有实现中删除可比较的接口
:
试着这样做:
import java.util.Comparator;
public class LastNameComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.lastname.compareTo(o2.lastname);
}
}
您是否还需要使用PriorityQueue
呢?按照错误消息告诉您的操作:不会覆盖compare(Person,Person)
-您将其命名为compareTo@override注释会告诉您错误,因为compareTo不会覆盖任何内容。
implements Comparable<Person>
public int compareTo(Person p){
String pname1 = firstName + lastName;
String pname2 = p.firstName + p.lastName;
return pname1.compareTo(pname2);
}
@Override
public int compare(Person a, Person b){
//..your code
}
import java.util.Comparator;
public class LastNameComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.lastname.compareTo(o2.lastname);
}
}
Collections.sort(pers,new LastNameComparator());
Iterator<Person> it = pers.iterator();
while(it.hasNext()){
System.out.println(it.next());
}