Java基本数据类型说明及方法介绍(持续更新中...
前言
目前这个更新没什么特定的顺序,就是在力扣上刷题的用到哪个就先写哪个了,现在暂时都写在一起,后续种类多了,会把它们分开,做个索引列表啥的,下面的均以Java JDK1.8为基础
双端队列Deque(接口)
说明
- 支持两端元素插入和移除的线性集合,Java中的Deque是一个接口,继承于Queue接口,故需要其他类来实现,已知实现类有
ArrayDeque,ConcurrentLinkedQueue,LinkedBlockingDeque,LinkedList
故创建对象写法一般为(例):
Deque<Integer> queue = new LinkedList<Integer>();
方法介绍
(接口方法,具体实现在不同的实现类中有多不同)
E为在此集合中保持的元素的类型
表格整理
方法类型 | 适用对象 | 具体名称 |
---|---|---|
头/尾元素插入 | 双端队列 | addFirst,addLast,offerFirst,offerLast |
头/尾元素查询 | 双端队列 | getFirst,getLast,peekFirst,peekLast |
头/尾元素查询 + 弹出 | 双端队列 | removeFirst,removeLast,pollFirst,pollLast |
尾元素插入 | 普通队列 | add,offer |
头元素查询 | 普通队列 | element,peek |
头元素查询 + 弹出 | 普通队列 | remove,poll |
尾元素插入 | 堆栈 | push |
尾元素弹出 | 堆栈 | pop |
判断是否包含 | 通用 | contains |
获取元素个数 | 通用 | size |
删除指定元素的第一次出现 | 通用 | remove(Object o) |
疑问解答
- 为什么同一个接口中的方法还要分双端队列/队列/堆栈这些适用对象呢,不都是双端队列吗?
- 双端队列的结构包含了普通队列和堆栈的的结构特点,有时候我们只是想把它当做普通队列或者堆栈来使用,为了避免错误操作,也为了看起来看起来更明显,默认使用对应的方法。实际上offerLast和offer的作用是一样的
- 同为插入元素,add和offer有什么区别?
- 当前没有可用空间时,add会抛出IllegalStateException,而offer则回返回false,因此在使用有容量限制的双端队列时,offer通常是优于add的
- 同为元素查询,element,get和peek有什么区别?
- element和get:两者实际上是一样的,element() 相当于 getFirst()
- get和peek:当队列为空时,get会抛出NoSuchElementException异常,而peek会返回null
- 同为元素弹出,remove和poll有什么区别?
- 当队列为空时,remove将抛出NoSuchElementException异常,而poll会返回null
双端队列Deque总结
- 提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。 下表总结了上述 12 种方法:
- 此接口扩展了 Queue 接口。在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法,如下表所示:
- 双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法,如下表所示:
- 注意,在将双端队列用作队列或堆栈时,peek 方法同样正常工作;无论哪种情况下,都从双端队列的开头抽取元素。 此接口提供了两种移除内部元素的方法:removeFirstOccurrence 和 removeLastOccurrence。 与 List 接口不同,此接口不支持通过索引访问元素。