Java中的栈和队列,ArrayDeque,LinkedList

文章目录

  • 栈和队列的定义
  • 相关接口和类
  • ArrayDeque实现栈的功能
  • ArrayDeque实现队列的功能
  • LinkedList实现栈的功能
  • LinkedList实现队列的功能
  • Deque中的相关方法

栈和队列的定义

  • 队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front,也叫队头)进行删除操作,而在表的后端(rear,也叫队尾)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
  • 栈:只能在一端(称为栈顶(top))对数据项进行插入和删除。

相关接口和类

Interface Queue 继承了 Collection, Iterable
Interface Deque 继承了 Collection, Iterable, Queue,双端队列
Class ArrayDeque 继承了AbstractCollection,实现了Serializable, Cloneable, Iterable, Collection, Deque, Queue
Class LinkedList 实现了Serializable, Cloneable, Iterable, Collection, Deque, Queue,List

ArrayDeque和LinkedList都实现了双端队列Deque,可以使用ArrayDeque或LinkedList实现栈和队列的功能。ArrayDeque采用数组的实现方式,LinkedList采用链表的实现方法。如果数据量较大,则使用LinkedList,否则优先使用ArrayDeque.

ArrayDeque实现栈的功能

import java.util.ArrayDeque;
import java.util.Deque;

public class CollectionDemo {
	public static void main(String[] args) {
		Deque<String> stack = new ArrayDeque<String>();	
		// 进栈
		stack.push("aa");
		stack.push("bb");
		
		// 查看栈顶元素
		String top = stack.peek();
		System.out.println(top); //bb
		
		// 出栈
		String popTop = stack.pop();
		System.out.println(popTop); //bb
		
		System.out.println(stack.pop()); //aa
	}
}

ArrayDeque实现队列的功能

import java.util.ArrayDeque;
import java.util.Queue;

public class CollectionDemo {
	public static void main(String[] args) {
		Queue<String> queue = new ArrayDeque<String>();	
		// 进队
		queue.offer("aa");
		queue.offer("bb");
		
		// 查看队头元素
		System.out.println(queue.peek()); //aa
				
		// 出队
		System.out.println(queue.poll()); //aa
		System.out.println(queue.peek()); //bb
	}
}

LinkedList实现栈的功能

相比于ArrayDeque实现栈的功能,只需修改Deque stack = new LinkedList(); 这也说明了面向接口编程的好处。

import java.util.LinkedList;
import java.util.Deque;

public class CollectionDemo {
	public static void main(String[] args) {
		Deque<String> stack = new LinkedList<String>();	
		// 进栈
		stack.push("aa");
		stack.push("bb");
		
		// 查看栈顶元素
		String top = stack.peek();
		System.out.println(top); //bb
		
		// 出栈
		String popTop = stack.pop();
		System.out.println(popTop); //bb
		
		System.out.println(stack.pop()); //aa
	}
}

LinkedList实现队列的功能

相比于ArrayDeque实现队列的功能,只需修改Queue queue = new LinkedList(); 这也说明了面向接口编程的好处。

import java.util.LinkedList;
import java.util.Queue;

public class CollectionDemo {
	public static void main(String[] args) {
		Queue<String> queue = new LinkedList<String>(); 
		// 进队
		queue.offer("aa");
		queue.offer("bb");
		
		// 查看队头元素
		System.out.println(queue.peek()); //aa
				
		// 出队
		System.out.println(queue.poll()); //aa
		System.out.println(queue.peek()); //bb
	}
}

Deque中的相关方法

Java中的栈和队列,ArrayDeque,LinkedList_第1张图片

你可能感兴趣的:(Java,数据结构和算法)