爪哇2博客
爪哇2博客

爪哇 8中的PriorityQueue

在这篇文章中,我们将看到 爪哇 8 PriorityQueue。

When the objects are supposed to be processed on the basis of their priority, in that scenario we use PriorityQueue。

这是一种特殊的 queue (同样,未绑定的队列) 元素可以按照其自然顺序或基于自定义顺序进行排序 比较器 在声明时实施。


让’s understand the concept of Priority Queue with a daily life ,

Suppose two-person went to two different banks to deposit some money, Person A is serviced on the basis of the queue formed on the cash counter, Person B is serviced according to the token numbers provided by the bank (Underlying Queue), now here both follows FIFO (First in First Out) model, but their priorities are determined by different factors, for Person A it’s their arrival time (standing in a queue), but for Person B it’s just the token number (smaller number serviced first). Now, even here we can modify our system, that senior citizens are serviced first, so 这个 is kind of a system where we have set few priorities (maybe on the basis of age).

优先队列数据结构

让’s说您想读几本书,并根据页数对其进行优先排序。您想先阅读较薄的书,然后逐步阅读较厚的书。

在给定的示例中,按照指定的顺序,优先级队列的最前面包含最小的元素,而最后面的包含最大元素。由于从前面移除了元素,因此首先移除了最少的元素。

一些要点

  • 不可比较的对象不能使用优先级队列来实现。
  • 不允许使用Null,因为我们无法将其与任何值进行比较。
  • 基本的检索操作(例如poll(),remove(),peek())访问位于队列前端或前端的元素。

建设者

  1. PriorityQueue(): 创建具有默认初始容量并遵循其元素自然顺序的优先级队列。
  2. PriorityQueue(Collection<E> c): 它在参数指定的集合中创建包含元素的Priority Queue。
  3. PriorityQueue(int initialCapacity):类似于 PriorityQueue() 具有指定的初始容量。
  4. PriorityQueue(int initialCapacity,比较器<E> 比较器): It is similar to PriorityQueue(int initialCapacity), 但extra参数指定其元素的顺序,该顺序应与指定的比较器一致。

方法

  1. 布尔值add(element) :此方法会将元素插入此优先级队列。
  2. 爪哇
    1
    2
    3
     
    p队列.(爪哇) ; //将“ 爪哇”添加到字符串类型优先级队列pQueue
     

  3. 布尔值remove(element): 此方法将从队列中删除一次出现的元素。
  4. 爪哇
    1
    2
    3
     
    p队列.去掉(爪哇) ; //从字符串类型优先级队列pQueue中删除“ 爪哇”
     

  5. 轮询(): 此方法返回队列开头的元素,因此将其从队列中删除,否则返回NULL(如果给定队列为空)。
  6. 爪哇
    1
    2
    3
     
    p队列.轮询(); //如果pQueue是上图中给出的Priority队列,则它将返回50并从Priority Queue中删除
     

  7. 窥视(): 此方法与 轮询(), 唯一的区别是,返回头后它不会移开头。
  8. 爪哇
    1
    2
    3
     
    p队列.窥视() ; //如果pQueue是上图中给出的Priority队列,则它将返回50。
     

  9. 布尔contains(element): 如果给定队列中包含指定的元素,则返回true。
  10. 爪哇
    1
    2
    3
    4
    5
     
    p队列.包含(250) ; //如果pQueue是上图中给出的Priority队列,则它将返回true。
     
    p队列.包含(365) ; //如果pQueue是上图中给出的Priority队列,则它将返回false。
     

  11. 明确():此方法将从优先级队列中删除所有元素,即它将清空现有的优先级队列并且不删除它。
  12. 爪哇
    1
    2
    3
     
    p队列.明确() ; //如果调用此函数后尝试打印队列,它将返回[]
     

  13. boolean 提供(element): 此方法用作add()方法,因为它也用于将特定元素插入优先级队列。
  14. 爪哇
    1
    2
    3
     
    p队列.提供(25) ; //将根据其自然顺序将25加到pQueue中,
     

  15. 整型 尺寸(): 此方法将返回优先级队列中的元素数。
  16. 爪哇
    1
    2
    3
     
    p队列.尺寸() ; //如果pQueue是上图中给出的Priority队列,则它将返回5。
     

  17. toArray(): 此方法的返回类型为array,它返回数组中优先级队列的所有元素。
  18. 爪哇
    1
    2
    3
     
    目的[] arr1 = p队列.toArray() ; //这会将优先级队列pQueue的所有元素存储在数组arr1中,因此我们可以使用简单的数组遍历来遍历这些元素
     

  19. 比较器比较器(): 此方法将返回用于对优先级队列的元素进行排序的比较器,如果队列遵循自然排序,则返回NULL值。
  20. 爪哇
    1
    2
    3
     
    p队列.比较器() ; //如果pQueue是上图中给出的Priority队列,则它将返回NULL,因为它遵循自然顺序。
     

创建一个PriorityQueue

现在,由于我们已经讨论了Priority Queue类的所有基本操作,方法和构造函数,因此,让我们看看如何以不同的方式实现它们,

由于整数类型很容易区分,因此让我们实现字符串类型。

我们将了解优先顺序将如何改变一些畅销书的顺序

使用No-arg构造函数(自然顺序)

在此程序中,我们创建了不带比较器的字符串类型的PriorityQueue,因此它将使用自然顺序,该顺序将根据Dictionary(字母顺序)添加一些字符串值以了解其工作原理。
我们还可以在这里看到add()和remove()的应用。

代码:

爪哇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
组织.Arpit.爪哇2blog.爪哇2blog程序;
进口 爪哇.实用程序.PriorityQueue;
 
进口 爪哇.实用程序.PriorityQueue;
 
上市 PriorityQueueMain {
    上市 静态的 虚空 主要 ([] args) {
        //创建字符串类型的优先级队列
        PriorityQueue<String> p队列 = PriorityQueue<>() ;
 
        //使用add()将项目添加到优先级队列(ENQUEUE)
        p队列.(“唐吉x德”) ;
        p队列.(“大师和玛格丽塔”) ;
        p队列.(“霍比特人”) ;
        p队列.(“红楼梦”) ;
        p队列.(“双城记”) ;
        p队列.(“然后什么都没有”) ;
 
        //使用remove()从优先级队列(DEQUEUE)中删除和打印项目
         (!p队列.是空的()) {
            系统..打印(p队列.去掉()) ;
        }
 
    }
}
 

输出:

双城记
然后什么都没有
唐吉x德
红楼梦
霍比特人
大师与玛格丽塔

使用自定义比较器

在此程序中,我们使用适当的语法分别指定了一个自定义比较器来实现PriorityQueue,在这里我们可以根据书本的数量来确定优先级。

代码:

爪哇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
组织.Arpit.爪哇2blog.爪哇2blog程序;
 
进口 爪哇.实用程序.比较器;
进口 爪哇.实用程序.PriorityQueue;
 
{
     bookName;
    整型 页数;
 
    上市 ( 名称, 整型 页数) {
        这个.bookName = 名称;
        这个.页数 = 页数;
    }
 
    @Override
    上市 toString() {
        返回 “书名是:” + bookName + “,页数是:” + 页数;
    }
}
 
按页数 实施 比较器<Book> {
    @Override
    上市 整型 相比(st1, st2) {
        返回 st2.页数 - st1.页数;
    }
}
 
上市 PriorityQueueMainComparator {
    上市 静态的 虚空 主要([] args) {
        按页数 补偿 = 按页数();
        //使用offer在pQueue中添加元素,我们也可以使用add()
        PriorityQueue<Book> p队列 = PriorityQueue<Book>(10, 补偿);
        p队列.提供( (“双城记”, 322));
        p队列.提供( (“大师和玛格丽塔”, 444));
        p队列.提供( (“唐吉x德”, 246));
        p队列.提供( (“然后什么都没有”, 342));
        p队列.提供( (“思考致富”, 401));
        p队列.提供( (“霍比特人”, 276));
        p队列.提供( (“红楼梦”, 378));
 
        //使用poll移除head元素,以根据
        //实现的比较器
        系统..打印(p队列.轮询());
        系统..打印(p队列.轮询());
        系统..打印(p队列.轮询());
        系统..打印(p队列.轮询());
        系统..打印(p队列.轮询());
        系统..打印(p队列.轮询());
        系统..打印(p队列.轮询());
    }
}
 

Here, is the 出put for the 码, where it is 明确ly seen that the elements are according to the number of 页数 of the book.

输出:

书名是:大师和玛格丽塔,页数是:444
书名是:Think and Grow Rich,页数是:401
书名是:红楼梦,页数是:378
书籍名称是:然后没有,并且页数是:342
书名是:两个城市的故事,页数是:322
书名是:霍比特人和页数是:276
书名是:唐吉x德,页数是:246

那’关于竞彩篮球分析 8中的Priority Queue的全部内容。


导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

  • 10月02

    用竞彩篮球分析中的值初始化ArrayList

    在本文中,我们将学习使用竞彩篮球分析中的值初始化ArrayList。 数组列表是竞彩篮球分析中List接口的实现类。它用于存储元素。它基于动态增长的阵列概念。我们可以通过几种方式用值初始化ArrayList。让’我们看到了其中一些…]

  • 10月06日

    2d Arraylist 爪哇示例

    在本文中,我们将看到如何在竞彩篮球分析中创建2d Arraylist。创建2d Arraylist的最佳方法是在竞彩篮球分析中创建列表的列表。 [crayon-601d0866354d8351380956 /]让’s创建一个程序来实现2d Arraylist 爪哇。 [crayon-601d0866354dc148775146 /]输出:list3中的第二个元素:List3_Str2 list1中的第三个元素:List1_Str3 list2中的第一个元素[…]

  • 04 May

    哈希图如何在竞彩篮球分析中工作

    最常见的面试问题是<code>HashMap如何在竞彩篮球分析中工作</code>, “HashMap的获取和放置方法如何在内部工作”。在这里,我试图通过一个简单的示例来解释内部功能。 [crayon-601d08664e94d793681075075-i /]是竞彩篮球分析中使用最广泛的Collections之一。与其通过理论,不如从理论上入手,这样您就可以[…]

  • 10月21日

    如何在竞彩篮球分析中对HashSet进行排序

    在本文中,我们将看到如何在竞彩篮球分析中对HashSet进行排序。 哈希集是一个不按任何顺序存储元素的集合。您可能会遇到需要对HashSet进行排序的情况。排序HashSet的方法有很多种,我们将在这里看到两种方法。使用TreeSet可以使用[…]

  • 10月20日

    要设置的竞彩篮球分析数组

    在本文中,我们将学习竞彩篮球分析数组设置转换。有很多方法可以将数组转换为set。 1.使用竞彩篮球分析 8’s Stream如果您使用的是竞彩篮球分析 8,建议您使用此方法。 [crayon-601d08664ee79564619156 /]输出[John,Martin,Mary] 2.使用HashSet构造函数()我们可以直接调用HashSet‘s的java构造函数set […]

  • 8月10日

    爪哇设置为数组

    在本文中,我们将学习将竞彩篮球分析设置为数组转换的方法。有很多方法可以将集合转换为数组。 1.使用竞彩篮球分析 8’s Stream如果您使用的是竞彩篮球分析 8,建议您使用此方法。 [crayon-601d08664ef6f864845600 /]输出[John,Martin,Mary] 2.使用toArray()我们可以直接在设置对象上调用toArray方法[…]

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


让’s be Friends

©2020 爪哇2博客