zoukankan      html  css  js  c++  java
  • Java 集合框架(三):Deque

    Deque

    双端队列,既可以当队列使用,也可以当栈使用。是一个接口。我们来看看 Deque 当作栈和队列时对应的方法。

    队列:

    Queue Method Equivalent Deque Method 说明
    add(e) addLast(e) 向队尾插入元素,失败则抛出异常
    offer(e) offerLast(e) 向队尾插入元素,失败则返回false
    remove() removeFirst() 获取并删除队首元素,失败则抛出异常
    poll() pollFirst() 获取并删除队首元素,失败则返回null
    element() getFirst() 获取但不删除队首元素,失败则抛出异常
    peek() peekFirst() 获取但不删除队首元素,失败则返回null

    栈:

    Stack Method Equivalent Deque Method 说明
    push(e) addFirst(e) 向栈顶插入元素,失败则抛出异常
    offerFirst(e) 向栈顶插入元素,失败则返回false
    pop() removeFirst() 获取并删除栈顶元素,失败则抛出异常
    pollFirst() 获取并删除栈顶元素,失败则返回null
    peek() peekFirst() 获取但不删除栈顶元素,失败则抛出异常
    peekFirst() 获取但不删除栈顶元素,失败则返回null

    表面上看起来非常复杂,其实也就是对容器两端进行添加修改和删除操作。Deque 的实现类有 ArrayDeque 和 LinkedList。

    ArrayDeque

    从名字就可以看出底层通过数组来实现。为了满足可以在数组两端插入和删除元素的需求,该数组还必需是循环数组。

    特点:

    • 底层实现是循环数组。
    • 可以当作栈和对垒来使用。
    • 不是线程安全的。
    • 不允许放入 null 元素。

    方法分析:

    因为底层是循环数组结构,所以 ArrayDeque 就需要考虑容量和下标的问题。如果不够需要进行扩容。

    Stack

    这个类实现了栈的功能,继承自 Vector 类,所以它拥有 Vector 的所有方法和线程安全的特性(因为 synchronized 所以性能没那么高)。

    Stack 在 Vector 的基础上加入了 栈相关的操作,比如 push,pop,peek 等等。

    如果想要使用栈这种数据结构,首选更加高效的 ArrayDeque。

  • 相关阅读:
    对国内技术社区
    github访问慢
    MVC 框架搭建
    EntityFramework与Ado.net的对比——EF优势何在?
    什么是DTO ,DTO 有什么作用
    一些有趣的资源推荐
    解决sublime text 3使用Install Package时出现There are no packages available for installation问题
    基于CentOS7的服务器搭建(LAMP环境)
    Windows下UEFI环境的搭建
    Ubuntu16.04下搜狗输入法、Sublime Text 3的安装
  • 原文地址:https://www.cnblogs.com/paulwang92115/p/12184744.html
Copyright © 2011-2022 走看看