优先级队列 to-do列表-容器深入研究
来源:互联网 发布:知行学院教务处登录 编辑:程序博客网 时间:2024/06/06 10:50
优先级队列 百科解释如下
如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。
就是原本队列是先进先出的,现在给它加一个优先级,优先级嘛就像会员一样,有些事情可以先做。但针对内部实现的话,很容易想到就需要一个排序的操作。在容器中一旦牵涉到排序都会出现一个Comparable接口当然这个也不例外。这个接口很好用实现以下,然后再重写一下compareTo方法即可,看下面的代码。
import java.util.PriorityQueue;public class ToDoList extends PriorityQueue<ToDoList.ToDoItem>{static class ToDoItem implements Comparable<ToDoItem> {private char primary;private int secondary;private String item;public ToDoItem(String td, char pri, int sec) {this.primary = pri;this.secondary = sec;this.item = td;}/** * 比较方法 * arg0 是比较对象 * 比它大 返回1 相等 0 小-1 */@Overridepublic int compareTo(ToDoItem arg0) {//先比较第一个优先级if(primary > arg0.primary) {return 1;} //如果第一个优先级的相等在比较第二个优先级的值if(primary == arg0.primary) {if(secondary == arg0.secondary) {return 0;}else if(secondary > arg0.secondary) {return 1;}}return -1;}/** * 重写toString方法,改变输出格式 */public String toString() {return Character.toString(primary) + secondary + ":" + item;}}/** * 调用父类中的add方法,往队列中添加指定类型的元素 * @param td * @param pri * @param sec */public void add(String td, char pri, int sec) {super.add(new ToDoItem(td, pri, sec));}public static void main(String[] args) {ToDoList toDoList = new ToDoList();toDoList.add("test1", 'C', 4);toDoList.add("test2", 'A', 4);toDoList.add("test3", 'B', 4);toDoList.add("test4", 'A', 2);toDoList.add("test5", 'B', 5);toDoList.add("test6", 'C', 12);toDoList.add("test7", 'C', 0);//依次取出并打印while(!toDoList.isEmpty()) {System.out.println(toDoList.remove());}}}输出结果
A2:test4A4:test2B4:test3B5:test5C0:test7C4:test1C12:test6从输出结果,很容易已看出,确实有优先级的样子,打印也不是按照加入的顺序打印的。主要归功于Comparable接口中的compareTo方法
0 0
- 优先级队列 to-do列表-容器深入研究
- C++ 容器适配器-优先级队列
- 容器深入研究
- 容器的深入研究
- 容器深入研究
- 深入研究容器
- 17 容器深入研究
- 深入java--容器深入研究
- 深入研究java线程优先级
- 深入研究 STL Deque 容器
- 深入研究 STL Deque 容器
- 深入研究 STL Deque 容器
- 深入研究 STL Deque 容器
- 深入研究 STL Deque 容器
- 深入研究 STL Deque 容器
- 深入研究 STL Deque 容器
- 深入研究 STL Deque 容器
- 第十七章:容器深入研究
- 关于高性能的那点事
- vim清空文件所有内容
- SQL Server 得到数据库中所有表的名称及数据条数
- woolrich outlet online Chen's father died a few months before the start of the demolition
- Xcode 快捷键的使用方式
- 优先级队列 to-do列表-容器深入研究
- “iOS 推送通知”详解:从创建到设置到运行
- 解决JSP路径问题的方法(jsp文件开头path, basePath作用)
- android获取当前运行Activity的名字(解决避免及时聊天再出现通知)
- 实现十进制与压缩bcd码之间的转换
- windows异常处理(pure function、invalid call、seh)
- 让类做HashMap的键-容器深入研究
- SQL SERVER 特殊需求的一个替换实例 --【叶子】
- SQL获得固定长度的随机字符串