priority queue java_Java实现PriorityQueue

发现自己的知识面水平实在是太低了,之前有这个概念,但是不知道Java已经实现了 PriorityQueue了,经别人的提醒,回来看了一下Thinking In Java,里面的介绍确实非常详细,而且代码写的很明朗。主要是一个实现了Comparable接口来对Priority进行控制。

In computer science, a priority queue is an abstract data type which is like a regular queue or stack data structure, but additionally, each element is associated with a “priority”.

stack — elements are pulled in last-in first-out-order (e.g. a stack of papers)

queue — elements are pulled in first-in first-out-order (e.g. a line in a cafeteria)

priority queue — elements are pulled highest-priority-first (e.g. cutting in line, or VIP service).

A priority queue must at least support the following operations:

insert_with_priority: add an element to the queue with an associated priority

pull_highest_priority_element: remove the element from the queue that has the highest priority, and return it (also known as “pop_element(Off)”, “get_maximum_element”, or “get_front(most)_element”; some conventions consider lower priorities to be higher, so this may also be known as “get_minimum_element”, and is often referred to as “get-min” in the literature; the literature also sometimes implement separate “peek_at_highest_priority_element” and “delete_element” functions, which can be combined to produce “pull_highest_priority_element”)

下面就是其中的代码:

package com.bjwilly.test;

import java.util.PriorityQueue;

public class PriorityQueueTest extends PriorityQueue{

static class TodoItem implements Comparable{

private char primary;

private int secondary;

private String item;

public TodoItem(String td,char pri,int sec){

primary = pri;

secondary = sec;

item = td;

}

@Override

public int compareTo(TodoItem arg) {

if(primary > arg.primary)

return +1;

if(primary == arg.primary)

if(secondary > arg.secondary)

return +1;

else if(secondary == arg.secondary)

return 0;

return -1;

}

public String toString(){

return Character.toString(primary)+ secondary + ": " + item;

}

}

public void add(String td,char pri,int sec){

super.add(new TodoItem(td,pri,sec));

}

public static void main(String[] args) {

PriorityQueueTest toDoList = new PriorityQueueTest();

toDoList.add("Empty trash",'C',4);

toDoList.add("Feed dog",'A',2);

toDoList.add("Feed bird",'B',7);

toDoList.add("Mow lawn",'C',3);

toDoList.add("Water lawn",'A',1);

toDoList.add("Feed cat",'B',1);

while(!toDoList.isEmpty())

System.out.println(toDoList.remove());

}

}

输出结果

A1: Water lawn

A2: Feed dog

B1: Feed cat

B7: Feed bird

C3: Mow lawn

C4: Empty trash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值