Java集合类的那点通俗的认知 (2)

在这里插入图片描述

03、PriorityQueue

考虑这样一种场景,王二现在是一个写作大咖了,不再只是一个会写代码的程序员了。有一天,他和几个热情的读者相遇在厕所的门口,为了表示对王二的尊重,读者们觉得礼让王二先去解决问题是必要的。

PriorityQueue是一种优先级队列(Priority即为优先的意思),可以应用于这种场景。代码示例如下:

public class WriterAndReader implements Comparable<WriterAndReader> {
    static PriorityQueue<WriterAndReader> queue = new PriorityQueue<WriterAndReader>();

    private String name;

    public WriterAndReader(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(WriterAndReader o) {
        // o为之前的
        if (this.getName().equals("王二")) {
            return -1;
        }
        return this.getName().compareTo(o.getName());
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return this.getName();
    }

    public static void main(String[] args) {

        // 第一次,没有发生比较,因为只有一个
        queue.add(new WriterAndReader("读者2"));
        // 第二次,与第一次放入的比较,发现读者1比读者2小
        queue.add(new WriterAndReader("读者1"));
        // 第三次,与读者1进行比较,发现王二小;
        queue.add(new WriterAndReader("王二"));

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

PriorityQueue既然要排出优先级,那么就要有一定的规则,排列的对象就要实现Comparable接口。

建议在学习的时候debug一下,你会发现queue的变化非常的有意思;每次add添加或者poll取出时就会执行对应的compareTo。(非常惭愧,我对内部的排序没有搞太懂,留待后面继续学习)

PriorityQueue常用的功能函数如下:

方法名 功能描述
add(E e)   添加元素  
clear()   清空  
contains(Object o)   检查是否包含当前参数元素  
offer(E e)   添加元素  
peek()   读取元素,(不删除)  
poll()   取出元素,(删除)  
remove(Object o)   删除指定元素  
size()   返回长度  

推荐阅读:

Java的内部类真的那么难以理解?
Java接口的实例应用:致敬我的偶像——何塞·穆里尼奥

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygyzz.html