栈
java.util;
Stack 类表示后进先出(LIFO)对象堆栈。 它使用五个操作扩展了类Vector,这些操作允许将向量视为堆栈。
Stack<Integer> stack = new Stack<>(); //新建堆栈 stack.push(1) ; // 向stack栈顶压入一个元素 stack.pop() ; // 从stack中弹出栈顶元素 stack.peek() ; // 查看stack中栈顶元素,不弹出 stack.empty() ; // 判断stack是否是空栈 stack.search(2) ; // 若该对象存在,返回对象在此堆栈上的从1开始的位置。
// 栈顶元素为对象时,返回1 // 若不存在,则返回-1,
Deque接口及其实现提供了一套更完整,更一致的LIFO堆栈操作,应优先使用此类。
(Deque意为双端队列,double ended queue)。具体来说又有ArrayDeuqe和LinkedList两种具体类来实现,两者的区别体现在底层分别使用数组和链表来实现。
LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能对它进行队列操作。
实现Deque接口,即能将LinkedList当作双端队列使用。
当LinkedList被当做栈来使用时,常用api及对应关系如下:
栈方法 等效方法
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()
empty() isEmpty() //判断是否为空
队列
java中虽然有Queue接口,单java并没有给出具体的队列实现类,而Java中让LinkedList类实现了Queue接口,所以使用队列的时候,一般采用LinkedList。因为LinkedList是双向链表,可以很方便的实现队列的所有功能。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。
java中定义队列 一般这样定义: Queue<E> queue = new LinkedList<E>();
当采用LinkedList来实现时,api的使用和对用关系如下:
队列方法 等效方法
offer(e) offer(e)/offerLast(e) //进队列,将元素加入队列末尾
poll() poll()/pollFirst() //获取队列头的元素并移除
peek() peek()/peekFirst() //获取队列头的元素 isEmpty() //判断是否为空
Queue<Integer> queue = new LinkedList<>(); queue.element(); queue.offer(1); queue.poll(); queue.peek();
双向队列
Deque <Integer> deque = new LinkedList<>(); deque.offer(1); deque.offer(2); deque.offerFirst(3); deque.pollLast();
小根堆
PriorityQueue类实现了优先队列,默认是一个小根堆的形式,如果要定义大根堆,需要在初始化的时候加入一个自定义的比较器。
PriorityQueue 实现heap
minHeap:PriorityQueue默认实现小根堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>(); minHeap.offer(8); minHeap.offer(5); minHeap.offer(3); minHeap.offer(4); minHeap.offer(2); while(!minHeap.isEmpty()) { System.out.println(minHeap.poll()); }
class maxComparator implements Comparator<Integer> { @Override public int compare(Integer num1, Integer num2) { return num1 >= num2 ? -1 : 1 ; } } PriorityQueue<Integer> maxHeap = new PriorityQueue<>(new maxComparator()); maxHeap.offer(5); maxHeap.offer(3); maxHeap.offer(4); maxHeap.offer(1); maxHeap.offer(2); while(!maxHeap.isEmpty()) { System.out.println(maxHeap.poll()); }
https://blog.csdn.net/the_rising_sun_/article/details/90245825
https://blog.csdn.net/huangfan322/article/details/52756441
TreeSet
https://www.cnblogs.com/yangyquin/p/5058208.html
