zoukankan      html  css  js  c++  java
  • 面试题:PriorityQueue底层是什么,初始容量是多少,扩容方式呢

    优先级队列的概念

    队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,在这种情况下,我们的数据结构应该提供两个最基本的操作:一个是返回最高优先级对象,一个是添加新的对象。 这种数据结构就是优先级队列(Priority Queue)。
    Java集合框架中提供了 PriorityQueue 和 PriorityBlockingQueue 两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,此处主要介绍PriorityQueue。

    PRIORITYQUEUE

    使用注意:

    1. 插入的元素是要可以比较的值,且不能为null
    2. 插入/删除–》再插入和删除元素期间,优先级队列中的元素会自己进行调整,但是无论怎么调整,0号位置的元素始终都是最小的(这是默认情况下的),可以通过某些方式使首元素最大
    3. 优先级队列的底层结构是堆
    4. 插入和删除的时间复杂度是O(logN)
    5. PriorityQueue底层使用了堆数据结构

    PRIORITYQUEUE常用接口

    构造方法:
    构造器 特点及功能介绍
    PriorityQueue() 创建一个空的优先级队列,默认容量是11
    PriorityQueue(int initialCapacity) 创建一个初始容量为initialCatacity的优先级队列,如果知道优先级队列中大概要放多少个元素,最好使用该方法进行构造,不要使用空的构造方式构造,因为在插入元素是需要不断地扩容而影响程序效率
    PriorityQueue((Collection<? extends E> c) 用集合来创建一个优先级队列,例子见下q3
    1. 无参的构造函数:
      在这里插入图片描述
      在这里插入图片描述
      有源码可以看出他的初始默认容量为11
      扩容机制
      在这里插入图片描述
    public static void TestPriorityQueue(){
     	// 创建一个空的优先级队列,底层默认容量是11
    	 PriorityQueue<Integer> q1 = new PriorityQueue<>();
    	 
    	 // 创建一个空的优先级队列,底层的容量为initialCapacity=100
    	 PriorityQueue<Integer> q2 = new PriorityQueue<>(100);
    	 
    	 ArrayList<Integer> list = new ArrayList<>();
    	 list.add(4);
    	 list.add(3);
    	 list.add(2);
    	 list.add(1);
    	 // 用ArrayList对象来构造一个优先级队列的对象
    	 PriorityQueue<Integer> q3 = new PriorityQueue<>(list);
    	 System.out.println(q3.size());
    	 System.out.println(q3.peek());
    
    其他接口
    构造器 返回值类型 特点及功能介绍
    offer(E e) boolean 往优先级队列中添加元素,插入成功返回true,如果e为null,抛出NullPointerException异常,时间复杂度为O(log2N) ,注意:空间不够的时候会自动进行扩容
    peek() E 获取优先级最高的元素,如果优先级队列为空,返回null
    poll() E 移除优先级最高的元素,如果优先级队列为空,返回null
    size() int 返回队列中元素个数
    clear void 清空优先级队列的元素
    isEmpty() boolean 判空

    注意:优先级队列插入元素期间,里面的元素会进行不断调整,首元素一定是最小的,但最大的不一定在最后

    转载:https://blog.csdn.net/qq_43360037/article/details/107897043

  • 相关阅读:
    谋哥:这个时代没有比程序员更适合创业
    《人人都可以创业》连载1:创业很简单,从心开始
    谋哥:悟马道长第一句话之“不要赚屌丝的钱”
    谋哥:App开发者的苦逼不值得怜悯!
    我们都傻不啦叽为《围住神经猫》免费推广!
    谋哥:转型之痒与App推广之痛
    学习IOS开发项目篇--如何让程序在后台保持挂起状态
    学习IOS开发项目篇--SDWebImage基本使用
    学习IOS开发网络多线程篇--NSThread/GCD/
    学习IOS开发UI篇--UICollectionViewController的基本使用
  • 原文地址:https://www.cnblogs.com/dalianpai/p/14282030.html
Copyright © 2011-2022 走看看