Java队列是一种数据结构,我们可以在队列的末尾插入一个元素,并从队列的开头删除它。它遵循FIFO(先进先出)的原则。
我们去ATM机上取钱,在那里我们使用这个队列的概念(如果有一群人)。我们必须保持一个队列,这个队列不过是一个队列。站在队列第一个的人得到第一个服务,站在队列最后的人得到最后的服务。
Java队列
Java Queue接口在java.util包中可用,它扩展了一个Collection接口。队列集合保存着即将被处理的元素,并提供各种操作,如插入、移除等。
队列是一个有序的对象列表,其用途仅限于在列表的末尾插入元素和从开始删除项目。
队列是一个接口,所以我们需要具体的类来声明;在这种情况下,最常见的具体类是LinkedList和PriorityQueue。
我们创建一个LinkedList和PriorityQueue的实例,并将其分配给Queue,如下面的语法:
Queue q = new LinkedList ();
Queue q = new PriorityQueue ();
队列的特征
队列用于在队列的末尾添加元素和从队列的开头删除元素。它遵循FIFO的概念(先进先出):
- Java队列支持集合接口的所有方法,包括插入、删除等。
- LinkedList、ArrayBlockingQueue和PriorityQueue是最经常使用的实现方式。
- 如果对BlockingQueue进行任何空操作,就会抛出NullPointerException。
- BlockingQueues有一个线程安全的实现。
- 这些队列可在java.util包中找到,即无界队列。
- java.util.concurrent包中的队列是Bounded Queue。
- 除了Deques之外,所有的队列都支持在队列的尾部和头部分别插入和删除。Deque支持在两端的项目插入和移除。
队列接口的方法
java中的队列接口有多种方法,我们可以通过这些方法来实现队列数据结构。
boolean add()
它用于在队列的末端插入任何特定的元素。由于它的返回类型是布尔值,如果元素被成功地添加到队列中,它将返回真,如果没有添加到队列中,则返回假。当队列超过其最大容量时就会发生这种情况。
// Add.java
import java.util.LinkedList;
import java.util.Queue;
class Add
{
public static void main(String []er)
{
//creating instance of LinkedList to decalre methods of Queue
Queue<String>q=new LinkedList<String>();
//adding elements into queue
q.add("AI");
q.add("Java");
//also used to add element
q.offer("Machine Learning");
q.add("App Development");
System.out.println("Elements in Queues are:"+q);
}
}
请看输出:
boolean offer()
// Add.java
import java.util.LinkedList;
import java.util.Queue;
class Add
{
public static void main(String []er)
{
//creating instance of LinkedList to decalre methods of Queue
Queue<String>q=new LinkedList<String>();
//adding elements into queue
q.add("AI");
q.add("Java");
//also used to add element
q.offer("Machine Learning");
q.add("App Development");
System.out.println("Elements in Queues are:"+q);
}
}
它也将指定的元素添加到队列中。它执行的工作与add()方法相同。输出与前面的程序相同:
Object remove()
它检索或删除队列的头部(第一个元素)并返回其值:
// Remove.java
//importing queue and linkedlist
import java.util.LinkedList;
import java.util.Queue;
class Remove
{
public static void main(String []er)
{
//creating instance of LinkedList to decalre methods of Queue
Queue<String>q=new LinkedList<String>();
//adding elements into queue
q.add("AI");
q.add("Java");
//also used to add element
q.offer("Machine Learning");
q.add("App Development");
System.out.println("Elements in Queues are before using remove method:"+q);
//remove the head element of the queue
q.remove();
System.out.println("Elements in Queues are after using remove method:"+q);
//removing element using poll method
q.poll();
System.out.println("Elements in Queues are after using poll method:"+q);
}
}
参见输出:
Object peek()
peek()方法返回队列的头部,请看下面的程序:
// Peek.java
//importing queue and linkedlist
import java.util.LinkedList;
import java.util.Queue;
class Peek
{
public static void main(String []er)
{
//creating instance of LinkedList to decalre methods of Queue
Queue<String>q=new LinkedList<String>();
//adding elements into queue
q.add("AI");
q.add("Java");
//also used to add element
q.offer("Machine Learning");
q.add("App Development");
System.out.println("Elements in Queues are:"+q);
//using peek method
System.out.println("The head element of queue is (using peek () method) :"+q.peek());
//using element() method
System.out.println("The head element of queue is (using element() method):"+q.element());
}
}
请看输出:
对象 element()
element()方法也返回队列的头部。但是element()方法和peek()方法的区别在于,如果队列是空的,则返回null。
请看下面的程序:
// Peek.java
//importing queue and linkedlist
import java.util.LinkedList;
import java.util.Queue;
class Peek
{
public static void main(String []er)
{
//creating instance of LinkedList to decalre methods of Queue
Queue<String>q=new LinkedList<String>();
//adding elements into queue
q.add("AI");
q.add("Java");
//also used to add element
q.offer("Machine Learning");
q.add("App Development");
System.out.println("Elements in Queues are:"+q);
//using peek method
System.out.println("The head element of queue is (using peek () method) :"+q.peek());
//using element() method
System.out.println("The head element of queue is (using element() method):"+q.element());
}
}
输出
对象 poll()
poll()方法与remove()方法类似,但唯一的区别是poll()在队列为空时返回null:
// Remove.java
//importing queue and linkedlist
import java.util.LinkedList;
import java.util.Queue;
class Remove
{
public static void main(String []er)
{
//creating instance of LinkedList to decalre methods of Queue
Queue<String>q=new LinkedList<String>();
//adding elements into queue
q.add("AI");
q.add("Java");
//also used to add element
q.offer("Machine Learning");
q.add("App Development");
System.out.println("Elements in Queues are before using remove method:"+q);
//remove the head element of the queue
q.remove();
System.out.println("Elements in Queues are after using remove method:"+q);
//removing element using poll method
q.poll();
System.out.println("Elements in Queues are after using poll method:"+q);
}
}
输出对象
size()
size()方法返回队列中元素的数量。由于它是集合类的一个子类型,它继承了集合类的所有方法,即size()、 isEmpty()、 contains()等。
本教程就讲到这里。