Java 数据结构:栈、队列、双向队列(Stack、Queue、Deque)

Stack

Stack 是 Java 中的一个类,用来实现栈这一数据结构,但现在推荐用更强大的 Deque 来代替它。

常用方法有:

  • empty():判断栈是否为空。
  • peek():查看栈顶元素。
  • push(E e):入栈。
  • pop():出栈,并返回出栈的元素。

stack

Queue

Queue 是 Java 中的一个接口,用来实现队列这一数据结构,实现类有 ArrayDeque、LinkedList、PriorityQueue 等。

常用方法:

  • isEmpty():判断队列是否为空。
  • peek():查看队首元素,若队列为空则返回 null
  • offer(E e):入队,入队成功则返回 ture,队列已满则返回 false
  • poll():出队,并返回出队的元素。若队列为空则返回 null
  • element():查看队首元素,若队列为空则抛出异常。
  • add(E e):入队,队列已满则抛出异常。
  • remove():出队,并返回出队的元素。若队列为空则抛出异常。

queue

Deque

Deque 即 “Double Ended Queue”(双向队列),这个接口扩展了 Queue 接口。与普通的队列的区别在于,队列只能在队尾插入新元素,删除队首的元素,而双向队列同时支持对其首部和尾部的插入和删除操作。所以它既能当队列用,也能当做栈用。

Deque 除了继承了 Queue 中的方法,还额外扩展了一些方法:

  • peekFirst():查看队首元素,若双向队列为空则返回 null,相当于 peek()
  • peekFirst():查看队尾元素,若双向队列为空则返回 null
  • getFirst():查看队首元素,若双向队列为空则抛出异常,相当于 element()
  • getFirst():查看队尾元素,若双向队列为空则抛出异常。
  • offerFirst(E e):在队首前插入元素,双向队列已满则返回 false
  • offerLast(E e):在队尾后插入元素,双向队列已满则返回 false,相当于 offer(E e)
  • addFirst(E e):在队首前插入元素,双向队列已满则抛出异常。
  • addLast(E e):在队尾后插入元素,双向队列已满则抛出异常,相当于 add(E e)
  • pollFirst():删除队首元素,并将它作为返回值,相当于 poll(E e)
  • pollLast():删除队尾元素,并将它作为返回值。
  • removeFirst():删除队首元素,并将它作为返回值,相当于 remove(E e)
  • removeLast():删除队尾元素,并将它作为返回值。
  • push(E e):相当于 addFirst()
  • pop():相当于 removeFirst()

在这里插入图片描述
若不管双向队列的尾部,只从它的首部进行插入和删除操作,这个双向队列就可以当作栈来使用,此时 push(E e)offerFisrt()addFirst(E e) 三个方法用作入栈操作,pop()pollFirst()removeFirst() 用作出栈操作。

总结:Deque 、Queue 和 Stack 中方法的比较

DequeQueueStack操作
peekFirst(), getFirst()peek()peek()查看队首/栈顶元素
peekLast(), getLast()N/AN/A查看队尾/栈底的元素
offerFirst(E e), addFirst(E e)N/Apush(E e)插入队首 /入栈
offerLast(E e), addLast(E e)offer(E e), add(E e)N/A入队/插入栈底
pollFirst(), removeFirst()poll(), remove()pop()出队/出栈
pollLast(), removeLast()N/AN/A移除队尾/栈底元素

参考来源:
Java SE 8 Stack
Java SE 8 Queue
Java SE 8 Deque

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值