一、栈Stack
特性:先进后出、后进先出
时间复杂度:添加和删除元素O(1),查询某个元素O(n)
示例代码:
Stack<Integer> stack = new Stack<>();//创建Stack实例
stack.push(1);//在栈顶插入元素
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack);//输出栈
System.out.println(stack.search(4));//元素4在栈中位置,下标从1开始
stack.pop();//移除栈顶元素
stack.pop();
Integer topElement = stack.peek();//查看栈顶元素
System.out.println(topElement);
System.out.println("3的位置"+stack.search(3));
运行结果:
[1, 2, 3, 4]
1
2
3的位置-1
二、队列Queue
特性:先进先出、后进后出
时间复杂度:添加和删除元素O(1),查询某个元素O(n)
具体实现和常用方法请看队列Java官方文档
源码文档
示例代码:
//创建队列的实现类LinkedList实例
Queue<String> queue = new LinkedList<String>();
queue.offer("one");//向队尾中插入元素
queue.offer("two");
queue.offer("three");
queue.offer("four");
System.out.println(queue);//打印队列
String polledElement = queue.poll();//取出队头元素
System.out.println(polledElement);
System.out.println(queue);
String peekedElement = queue.peek();//查询队头元素
System.out.println(peekedElement);
System.out.println(queue);
//遍历队列
while (queue.size()>0) {
System.out.println(queue.poll());
}
运行结果:
[one, two, three, four]
one
[two, three, four]
two
[two, three, four]
two
three
four
三、双端队列Deque
双端队列为栈和队列的结合体。它可以往队列前端添加或移除元素,也可以往队列后端添加或移除元素
时间复杂度:插入和删除元素O(1),查询某个元素O(n)
具体实现和常用方法请看双端队列Java官方文档
示例代码:
//创建Deque的实现类LinkedList实例
Deque<String> deque = new LinkedList<String>();
deque.addFirst("a");//在队头添加元素
deque.addFirst("b");
deque.addFirst("c");
System.out.println(deque);
String string = deque.getFirst();//查询队头第一个元素
System.out.println(string);
System.out.println(deque);
//遍历队列
while (deque.size()>0) {
System.out.println(deque.removeFirst());//查询并删除队头第一个元素
}
System.out.println(deque);
运行结果:
[c, b, a]
c
[c, b, a]
c
b
a
[]
四、优先队列PriorityQueue
特性:和栈与队列不同,不在是先入后出或先入先出,而是按照元素优先级出
时间复杂度:插入操作为O(1),取出操作为O(logn)【按照元素优先级取出】
优先队列底层具体实现的数据结构较为多样和复杂,可以使用heap堆、bst二叉搜索树、treap树堆来实现
具体实现和常用方法请看优先队列Java官方文档