栈
先进后出(LIFO)
java中栈的基本操作
Stack继承于Vector(),是通过数组实现。
Stack的常用API
栈的方法 | 返回类型 | 方法说明 |
push(Object obj) | T | 在栈顶添加一个元素 |
peek() | T | 返回栈顶元素 |
stack.search(Object) | T | 获取查找的元素下标,从栈底开始向栈顶查找 |
pop() | T | 取出栈顶元素,然后删除该元素 |
empty() | boolean | 栈是否为空 |
package cn.basic.stack;
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
//实例化
Stack<Object> stack = new Stack<>();
//判断是否为空
System.out.println(stack.isEmpty());
//进栈
stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println(stack.toString());
//返回栈顶元素
System.out.println(stack.peek());
//出栈
stack.pop();
System.out.println(stack.size());
System.out.println(stack.toString());
//查询
System.out.println(stack.search("d"));
}
}
队列
先进先出(FIFO)
队列是一种特殊的线性表,只允许在表的前端进行删除操作,在表的后端进行插入操作。
LinkedList类实现了Queue接口,因此可以把LinkedList当作Queue来使用。
队列方法 | 抛出异常 | 返回特殊值 |
插入元素 | add(e) | offer(e) |
移除元素 | remove() | poll() |
查询元素 | element() | peek() |
package cn.basic.queue;
import java.util.LinkedList;
import java.util.Queue;
public class QueueDemo {
public static void main(String[] args) {
Queue<Object> queue = new LinkedList<Object>();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
queue.offer(5);
for(Object q:queue) {
System.out.println("队列元素:"+q);
}
//返回第一个元素,并在队列中删除(poll)
queue.poll();
for(Object q:queue) {
System.out.println("队列元素:"+q);
}
//返回第一个元素,并在队列中删除(remove)
queue.remove();
for(Object q:queue) {
System.out.println("队列元素:"+q);
}
//返回第一个元素(peek)
System.out.println(queue.peek());
//返回第一个元素(element)
System.out.println(queue.element());
}
}
在队列中,offer()与remove()方法在方法失败时会抛出异常。
一些队列有大小的限制,因此如果想要在满的队列里面插入新项,则多出的项会被拒绝。使用add()方法,这时会抛出unchecked异常,使用offer方法,则返回false。
从队列中删除第一个元素:poll在用空集合时,返回null。remove则会抛异常。
在队列的头部查询元素:peek在空队列时返回null,element()则抛出异常。