有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);      
       }   
    }

我需要:

  1. 无排序打印(已在主目录中完成)
  2. 按姓氏排序
  3. 按名字排序,然后按姓氏排序

我不能更改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

共 (2) 个答案

  1. # 1 楼答案

    首先,您必须从person class及其所有实现中删除comparable interface: 试着这样做:

    import java.util.Comparator;
        public class LastNameComparator implements Comparator<Person>{    
        @Override
        public int compare(Person o1, Person o2) {
    
            return o1.lastname.compareTo(o2.lastname);
        }
        }
    

    main method中,按姓氏排序执行以下操作:

    Collections.sort(pers,new LastNameComparator());
        Iterator<Person> it = pers.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
           }
    
  2. # 2 楼答案

    首先: 请移开

    implements Comparable<Person>
    

     public int compareTo(Person p){
           String pname1 = firstName + lastName;
           String pname2 = p.firstName + p.lastName;
           return pname1.compareTo(pname2);
        }
    

    从个人类,因为你不大声做任何改变

    第二: 比较器类只有compare(tob1,t2ob2)方法,没有公共int compareTo(persona,personb)。 所以请创建compare(tob1,t2ob2)并将@Override注释放在上面,以确保您做的一切都是正确的

    所以毕竟在你的比较器类中

    @Override
    public int compare(Person a, Person b){
    //..your code
    }
    

    代码的其余部分看起来很好,从快速查看