Java中优先队列和队列实现的区别?


队列是一种线性数据结构,从队尾插入元素,从队首移除元素。

优先队列是普通队列的扩展版本,每个元素都有优先级。在本教程中,我们将学习Java中的队列和优先队列及其各自的实现。

Java中优先队列和队列的区别

方面

优先队列

队列

定义

优先队列是指每个元素都具有优先级的队列。队列中的元素根据其优先级移除。

队列是Java中的一个接口,使用FIFO原则移除其元素。

类型

最小优先队列和最大优先队列。

它没有类型。

结构

优先队列中的每个元素都有优先级。

队列元素没有优先级。

出队操作

元素根据其最高优先级移除。

队列中的元素按照FIFO顺序移除。

元素排序

它是一个有序队列,使得搜索更容易。

它是一个随机组织的队列。

复杂度

优先队列的实现比较困难。

它是一个简单的队列,易于实现。

语法

PriorityQueue <数据类型> queue_name = new PriorityQueue<>();

Queue<数据类型> queue_name = new LinkedList<>();

属性

优先队列继承了AbstractCollection、AbstractQueue、Object和Collection类的的方法。

它使用队列接口和util包在Java中实现队列。

操作

入队和出队元素并不容易。

插入和移除元素非常容易。

优点

很容易出队最高优先级的元素。

队列不浪费内存,并有效地利用内存。

缺点

插入和删除元素需要更多时间。

它具有有限的空间并且无序。

出队和入队时间复杂度

O(log(n))

O(1)

Java中优先队列和队列的实现

示例1

Java中的队列实现

队列的语法

Queue<data type> queue_name = new LinkedList<>();

Java中实现队列的代码

import java.util.*; // importing util package with all its features
public class Main  {
   public static void main(String[] args) {
      Queue<Integer> q = new LinkedList<>(); // queue declaration
	  q.add(5); //adding elements to the queue
	  q.add(6);
      q.add(4);
      q.add(1);
      q.add(8);
		
	  System.out.println("Queue is" + q);
      System.out.println("Removing queue element: " + q.remove());
      System.out.println("Now the Queue is: " + q);
   }
}

输出

Queue is [5, 6, 4, 1, 8]
Removing queue element: 5
Now the Queue is: [6, 4, 1, 8]

示例2

Java中的优先队列实现

优先队列的语法

PriorityQueue <data type> queue_name = new PriorityQueue<>();

Java中实现优先队列的代码

import java.util.*;

public class PriorityQueueExample {
   public static void main(String[] args) {
      //declaring priority queue q of string type
     
      PriorityQueue <String> p = new PriorityQueue<>(); 
	  // inserting elements into the priority queue
     
      p.add("Life");
	  p.add("is");
	  p.add("Coding");
      System.out.println("Priority Queue is " + p);
   }
}

输出

Priority Queue is [Coding, is, Life]

示例3

优先队列中的poll()方法

import java.util.*;

public class PriorityQueueExample {
   public static void main(String[] args) {
      PriorityQueue <Integer> p = new PriorityQueue<>();
      p.add(5);
      p.add(7);
      p.add(1);
      System.out.println("Priority Queue is: " + p);
      int i = p.poll();
      System.out.println("Head element: " +i);
      System.out.println("Queue after removing head element: "+p);
   }
}

输出

Priority Queue is: [1, 7, 5]
Head Element: [1]
Queue after removing head element: [5, 7]

结论

Java中的队列是一种线性数据结构,用于广度优先搜索算法。优先队列是普通队列的扩展,它是Java中的一个接口,每个元素都与优先级相关联。可以使用各种队列函数来使用其功能。

更新于: 2023年2月22日

3K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.