JAVA PriorityQueue应用实例

PriorityQueue这种数据结构支持按照优先级取出里面的元素。这是和其它常用数据结构,比如 ArrayList, Queue, Stack等最大的区别。因为要支持优先级,而heap具有类似的结构,所以,PriorityQueue一般都是基于HEAP实现的。(也可以用其它数据结构实现,但是各种复杂度会有不同。)

基于HEAP实现的PriorityQueue复杂度分析:

add(E e): O(lg n)

poll():  O(lg n) (注意,取出元素只需要O(1), 但是维护HEAP结构需要 O(lg n))

remove(E e): O(n)

下面例子是用Priority Queue保存学生信息,学生类含有姓名和成绩,当把学生保存在Priority Queue里时,成绩最低的学生放在最前面。如果想把成绩最高的放在最前面,只要把compare方法改成 return s2.grade - s1.grade; 即可。

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

public class PriorityQueueTutorial{
	
	public static void main(String args[]){
		PriorityQueue<Student> queue = new PriorityQueue<Student>(11,
		        new Comparator<Student>() {
		          public int compare(Student s1, Student s2) {
		            return s1.grade - s2.grade;
		          }
		        });	    
			
		for (int i = 1; i <= 100; i++) {
			queue.add(new Student("s" + i, (new Random().nextInt(1000))));
		}
		while (!queue.isEmpty()) {
		      System.out.println(queue.poll().toString());
	    }
	}
}

class Student {	
	String name;
	int grade;
	public Student(String name, int grade)
	{
		this.name = name;
	    this.grade = grade;
	}
	
	public String toString() {
		return name + " " + grade;
	}
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值