栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java优先队列及常用方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java优先队列及常用方法

Java优先队列及常用方法
  • 什么是优先队列
  • 常用方法
  • 最小优先队列
  • 最大优先队列
  • 注意

什么是优先队列

普通的队列都是先入先出的形式,元素在队尾加入,在队头删除。优先队列中,元素被赋予优先级,具有最高优先级的元素先出。通常采用二叉堆结构实现。
所以优先队列和堆一样,有两种形式:最大优先队列和最小优先队列。
最大优先队列是指最大值具有最高优先级。
最小优先队列是值最小值具有最高优先级。
每次的push和pop操作,队列都会动态的调整。
Java中PriorityQueue类实现优先队列。

常用方法
public boolean add(E e);//在队尾添加元素
public E peek();//取出队头元素
public boolean remove(Object o);//删除指定元素
public boolean contains(Object o);//检查是否包含元素
public Object[] toArray();//将队列转换成数组
public int size();//返回元素个数
public void clear() ;//清空队列
public E poll(); //返回并清除队头元素
public boolean isEmpty(); //判断队列是否为空   
最小优先队列
public class test {

	@Test
	public void test() {
		int[] nums = new int[] { 12, 3, 8, 5, 16, 30, 9 };
		Queue queue = new PriorityQueue<>();
		for (int num : nums) {
			queue.add(num);
		}
		System.out.println(Arrays.toString(queue.toArray()));
		while (!queue.isEmpty()) {
			System.out.print(queue.poll() + " ");
		}
	}

}

结果:

[30, 12, 16, 3, 5, 8, 9]
30 16 12 9 8 5 3 
最大优先队列
public class test {

	@Test
	public void test() {
		int[] nums = new int[] { 12, 3, 8, 5, 16, 30, 9 };
		Queue queue = new PriorityQueue<>(new Comparator() {

			@Override
			public int compare(Integer o1, Integer o2) {
				return o2 - o1;
			}
		});
		for (int num : nums) {
			queue.add(num);
		}
		System.out.println(Arrays.toString(queue.toArray()));
		while (!queue.isEmpty()) {
			System.out.print(queue.poll() + " ");
		}
	}

}

结果:

[30, 12, 16, 3, 5, 8, 9]
30 16 12 9 8 5 3 
注意
  • 优先队列默认是最小优先队列,要使用最大优先队列可以重写Comparator接口
  • 不是放入优先队列里数字就是有序的,只是队头元素永远是最大值或最小值
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号