Java最高

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程

1.概述

在本教程中,我们将展示如何使用JavaArrayDeque类的实现双端队列接口。

一个ArrayDeque(也称为“数组双结束队列”,发音为“ArrayDeck”)是一种特殊的可增长数组,允许我们从两边添加或删除一个元素。

一个ArrayDeque实现可以用作堆栈(方法暗含)或队列(先进先出)。

2.API一览

对于每个操作,我们基本上有两个选择。

第一组由在操作失败时抛出异常的方法组成。另一组返回状态或值:

操作 方法 方法抛出异常
插入从头 offerFirst (e) addFirst (e)
去除从头 pollFirst () removeFirst ()
检索从头 peekFirst () 列表()
从尾部插入 offerLast (e) addLast (e)
从尾 pollLast () removeLast ()
检索从尾巴 peekLast () getLast ()

3.使用方法

让我们看几个简单的例子,看看如何利用ArrayDeque

3.1.使用ArrayDeque作为一个堆栈

我们将从一个如何将类视为a的例子开始堆栈-并推入元素:

@Test public void whenPush_addsAtFirst() {Deque stack = new ArrayDeque<>();stack.push(“第一”);stack.push(“第二”);assertequal(“第二”,stack.getFirst ());}

元素中弹出一个元素ArrayDeque-当用作堆栈时:

@Test public void whenPop_removesLast() {Deque堆栈= new ArrayDeque<>();stack.push(“第一”);stack.push(“第二”);assertequal(“第二”,stack.pop ());}

流行方法抛出NoSuchElementException当堆栈为空时。

3.2.使用ArrayDeque作为一个队列

现在让我们从一个简单的示例开始,演示如何在ArrayDeque-当用作简单的队列

@Test public void whenOffer_addsAtLast() {Deque queue = new ArrayDeque<>();queue.offer(“第一”);queue.offer(“第二”);assertequal(“第二”,queue.getLast ());}

我们看看如何从an中轮询一个元素ArrayDeque,也可用作a队列

@Test public void whenPoll_removesFirst() {Deque queue = new ArrayDeque<>();queue.offer(“第一”);queue.offer(“第二”);assertequal(“第一”,queue.poll ());}

民意调查方法返回一个值,如果队列为空。

4.怎么样ArrayDeque实现


引擎盖下面ArrayDeque由一个数组支持,该数组在被填充时将其大小翻倍。

初始化时,数组的大小为16。它被实现为一个双端队列,它维护两个指针,即一个头和一个尾。

让我们来看看这个逻辑在高水平上的实际应用。

4.1.ArrayDeque作为堆栈


可以看出,当用户使用方法,则将头部指针移动1。

当弹出一个元素时,它将位于头部位置的元素设置为所以元素可以被垃圾回收,然后将头部指针向后移动1。

4.2.ArrayDeque作为一个队列


类添加元素时提供方法,则将尾部指针移动1。

当用户轮询一个元素时,它会将头部位置的元素设置为null,以便对该元素进行垃圾收集,然后移动头部指针。

4.3。笔记ArrayDeque

最后,关于这个特定的实现,还有一些值得理解和记住的注意事项:雷竞技app官网网站

  • 这不是线程安全的
  • 不接受空元素
  • 工作明显快于同步堆栈
  • 比排队快吗LinkedList由于更好的参考位置
  • 大多数操作都有平摊的常数时间复杂度
  • 一个迭代器返回一个ArrayDeque是快速失败
  • ArrayDeque添加元素时,当头指针和尾指针相遇时,数组的大小自动翻倍

5.结论

在这篇简短的文章中,我们演示了方法的使用ArrayDeque

中可以找到所有这些示例的实现GitHub项目;这是一个基于maven的项目,所以它应该很容易导入和运行。

Java底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
对这篇文章的评论关闭!