数据结构之优先队列

数据结构之优先队列

priority queue

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。

属性

优先队列的属性和队列类似主要包括以下部分

int size() 返回队列的长度
boolean add(E) / boolean offer(E) 向队列尾部中添加元素
E remove()/E poll() 从队列头取出元素并删除
E element()/E peek() 从队列头取出元素但不删除

添加时若使用add当添加的元素超过了Queue的长度会报错,当调用offer时不会报错,会返回false

去除元素时,若使用remove(),当Queue为空,会报错,当调用poll()会返回null

:LinkedList即实现了List接口,又实现了Queue接口,但是,在使用的时候,如果我们把它当作List,就获取List的引用,如果我们把它当作Queue,就获取Queue的引用

// 这是一个List:
List<String> list = new LinkedList<>();
// 这是一个Queue:
Queue<String> queue = new LinkedList<>();

简单示例

package top.ligongd.structure;

import java.util.Comparator;
import java.util.PriorityQueue;

public class PriorityQueueDemo {
    public static void main(String[] args) {
        PriorityQueue<User> priorityQueue = new PriorityQueue<>(new UserComparator());
        priorityQueue.offer(new User("V12", 12));
        priorityQueue.offer(new User("we", 13));
        priorityQueue.offer(new User("V13", 14));

        User user1 = priorityQueue.poll();
        User user2 = priorityQueue.poll();
        User user3 = priorityQueue.poll();

        System.out.println(user1.getName());
        System.out.println(user2.getName());
        System.out.println(user3.getName());


    }
}

class User{
    private String name;
    private int age;

    public User(String name, int age){
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class UserComparator implements Comparator<User> {
    @Override
    public int compare(User o1, User o2) {
        if(o1.getName().charAt(0) == o2.getName().charAt(0))
            return o1.getName().compareTo(o2.getName());
        if(o1.getName().startsWith("V"))
            return -1;
        else
            return 1;
    }
}
V12
V13
we

Process finished with exit code 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值