基础与技巧
Last updated
Last updated
Deque有三种使用形式:
Deque是一个线性collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。
此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。 下面是12种方法:
Deque接口扩展(继承)了 Queue 接口。在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法
双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法
Deque的实现:
一般场景
LinkedList 大小可变的链表双端队列,允许元素为 null
ArrayDeque 大小可变的数组双端队列,不允许 null
并发场景
LinkedBlockingDeque 如果队列为空时,获取操作将会阻塞,知道有元素添加
Demo示例
a: 要搜索的数组
key:要搜索的值
如果key在数组中,则返回搜索值的索引;否则返回-1或“-”(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素的索引。
这里涉及到搜索值的几种情况:
1.搜索值是数组元素,从0开始计数,得搜索值的索引值
2.搜索值不是数组元素,且小于数组内元素,索引值为 – 1
3.搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”
4.搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1)
举例
输出
a:要搜索的数组
fromIndex:指定范围的开始处索引(包含)
toIndex:指定范围的结束处索引(不包含)
key:要搜索的值
如果要搜索的元素key在指定的范围内,则返回搜索值的索引;否则返回-1或“-”(插入点)。
这里涉及到搜索值的几种情况:
1.该搜索键在范围内,且是数组元素,由0开始计数,得搜索值的索引值
2.该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1)
3.该搜索键在范围内,但不是数组元素,由1开始计数,得“ - 插入点索引值”
4.该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1)
举例
输出