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。

  • 相关阅读:
    sql测试
    sql时间和日期函数
    递归算法
    冒泡排序
    Ajax
    省市区下拉框三级联动
    Repeater用法
    WIndows form Linq多表联合
    C# 递归算羊
    C# 定义一个学生的结构体,输入学生信息,学号,姓名,身高,按身高排序输出
  • 原文地址:https://www.cnblogs.com/paulwang92115/p/12184744.html
Copyright © 2011-2022 走看看