自定义对象,并实现Comparable接口。使用代码如下:
package tijava.container;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Queue;
class ToDoItem implements Comparable<ToDoItem> {
private char primary;
private int secondary;
private String item;
public ToDoItem(char primary, int secondary, String item) {
super();
this.primary = primary;
this.secondary = secondary;
this.item = item;
}
@Override
public int compareTo(ToDoItem o) {
if (this.primary > o.primary)
return +1;
if (this.primary == o.primary) {
if (this.secondary > o.secondary)
return +1;
else if (this.secondary == o.secondary)
return 0;
}
return -1;
}
public String toString() {
return Character.toString(primary) + this.secondary + " : " + this.item;
}
}
public class PriorityQueueDemo {
public static void main(String[] args) {
Queue<ToDoItem> q = new PriorityQueue<ToDoItem>();
q.add(new ToDoItem('C', 4, "Empty trash"));
q.add(new ToDoItem('A', 2, "Feed dog"));
q.add(new ToDoItem('B', 7, "Feed bird"));
q.add(new ToDoItem('C', 3, "Mow lawn"));
q.add(new ToDoItem('A', 1, "Water lawn"));
q.add(new ToDoItem('B', 1, "Feed cat"));
while (!q.isEmpty()) {
System.out.println(q.remove());
}
//reverseOrder
Queue<ToDoItem> q1 = new PriorityQueue<ToDoItem>(1,
Collections.reverseOrder());
q1.add(new ToDoItem('C', 4, "Empty trash"));
q1.add(new ToDoItem('A', 2, "Feed dog"));
q1.add(new ToDoItem('B', 7, "Feed bird"));
q1.add(new ToDoItem('C', 3, "Mow lawn"));
q1.add(new ToDoItem('A', 1, "Water lawn"));
q1.add(new ToDoItem('B', 1, "Feed cat"));
while (!q1.isEmpty()) {
System.out.println(q1.remove());
}
}
}
output:
A1 : Water lawn
A2 : Feed dog
B1 : Feed cat
B7 : Feed bird
C3 : Mow lawn
C4 : Empty trash
C4 : Empty trash
C3 : Mow lawn
B7 : Feed bird
B1 : Feed cat
A2 : Feed dog
A1 : Water lawn
分享到:
相关推荐
使用顺序存储实现优先级队列,展示优先级队列和普通队列的区别之处。
在计算机科学中,我们通常使用优先级队列来解决那些需要处理具有不同优先级任务的问题。与普通队列遵循“先进先出”(FIFO)原则不同,优先级队列依据元素的优先级进行出队操作,而不是按照它们被插入的顺序。优先级...
优先级队列是一种特殊的数据结构,它按照优先级顺序存储元素,最高优先级的元素总是在队列的前端。在计算机科学中,堆通常被用来实现优先级队列。堆是一种完全二叉树,其中每个父节点的值都大于或等于(最大堆)或...
本文将深入探讨优先级队列的概念、实现方式以及如何在实际编程中使用。 首先,理解二叉堆是理解优先级队列的关键。二叉堆分为最大堆和最小堆,最大堆的每个父节点的值都大于或等于其子节点的值,而最小堆则相反,每...
优先级队列的应用非常广泛,例如在银行贵宾卡服务、Windows消息队列、个人事务处理等领域都可以使用优先级队列来管理任务的执行顺序。 优先级队列的抽象数据类型(Abstract Data Type,ADT)定义了优先级队列的基本...
优先级队列cpp文件PriorityQueue.cpp
用c语言实现的,简单易懂,希望对大家有用。
优先级队列的设计和实现 在计算机科学中,数据结构是一个非常重要的概念,它直接影响着算法的效率和程序的可读性。其中,优先级队列是一种特殊的数据结构,它支持对数据对象的优先级访问和操作。本章将对优先级队列...
算法中优先级队列问题...用堆排序的算法来做的例子
学生成绩管理系统是一个简单的应用示例,它可以使用小大根交替堆实现的双端优先级队列来存储和管理学生的成绩信息。在该系统中,学生的成绩信息可以被插入和删除,而优先级机制则可以根据学生的成绩排名来进行动态...
dheap(插入元素)、pop_max_dheap(删除最大元素)、pop_min_dheap(删除最小元素),is_dheap(堆验证)五个泛型算法,在此基础上实现了一个能在对数时间内获取最大和最小元素的优先级队列,相当于原stl优先级队列...
在MATLAB中,实现优先级队列的一种常见方法是使用二叉堆。二叉堆是一种特殊的树形数据结构,可以保证父节点的优先级总是不低于(或不高于,取决于是最大堆还是最小堆)其子节点。这样,堆顶元素总是具有最高的优先级...
优先队列 ES6的优先级队列 描述 ES6实现具有TypeScript支持的... 为了提高性能,Prioqueue优先级队列使用数组实现的二进制堆作为其骨干,从而为插入和删除提供O(log n)性能。 用法 Prioqueue公开了可链接的API,可
这样的设计使得在MATLAB中使用优先级队列变得更加便捷和高效。 资源文件夹(resources)可能包含了项目的文档、示例或者其他辅助资料,帮助用户理解和使用这个MEX文件。而"pradeepr-roboticist-PriorityQueue-MEX-...
为了使 getMax() 接口的效率提升到 O(1),同时 delMax() 和 insert() 接口的效率提升到 O(logn),可以使用完全二叉堆来实现优先级队列。完全二叉堆是一种特殊的堆,它可以在 O(logn) 时间内完成插入和删除操作,并且...
在"os.rar_优先级 队列"这个主题中,我们将深入探讨操作系统如何利用优先级队列来管理进程,确保高效和公平地执行任务。 首先,进程是操作系统中运行的程序实例。在多任务环境中,操作系统需要决定哪个进程应该获得...
优先级队列允许我们使用自定义的容器(如`std::vector`、`std::deque`)和比较器。例如,如果你想使用`std::stack`作为底层容器,可以这样定义: ```cpp #include #include struct CustomCompare { bool ...