Java中那些高级的数据结构

84 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情


在刷算法题的过程中,我们总会遇到这样那样的问题,对于某些问题来说,一个好的数据结构总是能轻松的解决问题,或者说能够为我们提供思路。今天就来总结一下Java中那些好用的数据结构,列举一些经常用到或者碰到的,讲述一些常用的基本用法。

双端队列

  • LinkedList:双链表实现

  • ArrayDeque:数组实现

既有栈的功能,又有队列的功能,一个数据结构就能代替栈和队列,并且拥有更多的用法。

使用

offerFirst()
offerLast()
pollFirst()
pollLast()
peekFirst()
peekLast()
  • 可以将其视为栈,使用栈的基本方法

    push():内部调用 addFirst 方法实现

    pop():内部调用 removeFirst 方法实现

  • 将其视为队列,使用队列的基本方法

    offer():内部调用 offerLast 方法,返回是否插入成功

    poll():内部调用 pollFirst 方法实现

优先级队列(堆)

  • PriorityQueue

Java中的优先级队列可以视为我们传统意义上的堆,默认为小根堆。可以通过构造方法传入比较器,将其实现为大根堆或者更加复杂的排序方式。

使用

优先级队列的相关操作函数与队列一致,常用 peek(), offer(), poll(),peek() 的时间复杂度为 O(1),入队出队操作的时间复杂度为 O(log(n))。

有序集合

  • TreeSet

TreeSet 中的元素不可重复,可以按照元素的大小顺序自动排序。

使用

可以在构造方法传入一个比较器对象,用来定义集合元素的排序方式。

first()//返回第一个元素
last()//返回最后一个元素
lower(E e)//返回小于e的最大元素
higher(E e)//返回大于e的最小元素
floor(E e)//返回小于等于e的最大元素
ceiling(E e)//返回大于等于e的最小元素