MST

星途 面试题库

面试题:Java中PriorityBlockingQueue如何保证元素按指定顺序排序

在Java中,PriorityBlockingQueue是一个基于堆结构的无界阻塞队列,它会根据元素的自然顺序或者你提供的Comparator进行排序。请描述在PriorityBlockingQueue中,如何通过自定义Comparator来保证元素按照特定规则排序,并给出一个简单示例代码。
17.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 描述如何通过自定义Comparator来保证元素按照特定规则排序
    • 创建一个实现了Comparator接口的类,在该类的compare方法中定义元素的比较规则。
    • 在创建PriorityBlockingQueue对象时,将这个自定义的Comparator实例作为参数传入,这样PriorityBlockingQueue在对元素进行排序时就会使用自定义的比较规则。
  2. 示例代码
import java.util.Comparator;
import java.util.concurrent.PriorityBlockingQueue;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

class PersonAgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        return p1.getAge() - p2.getAge();
    }
}

public class PriorityBlockingQueueExample {
    public static void main(String[] args) {
        PriorityBlockingQueue<Person> queue = new PriorityBlockingQueue<>(10, new PersonAgeComparator());
        queue.add(new Person("Alice", 25));
        queue.add(new Person("Bob", 20));
        queue.add(new Person("Charlie", 30));

        while (!queue.isEmpty()) {
            System.out.println(queue.poll());
        }
    }
}

在上述代码中:

  • Person类表示一个人,包含姓名和年龄属性。
  • PersonAgeComparator类实现了Comparator接口,在compare方法中按照年龄对Person对象进行升序排序。
  • main方法中,创建了一个PriorityBlockingQueue,并使用PersonAgeComparator作为比较器。向队列中添加了几个Person对象,最后从队列中取出元素,会发现元素是按照年龄从小到大的顺序输出的。