Java 堆、栈、队列(遇见再更新)
目录
- Java 栈、队列
- 栈
- 常用方法
- 案例
- 队列
- 栈
Java 栈、队列
栈
常用方法
boolean empty() 测试堆栈是否为空
Object peek() 查看堆栈顶部的对象
Object pop() 栈顶元素出栈
Object push(Object element)元素入栈
int search(Object element) 返回对象在堆栈中的位置,以 1 为基数
案例
public void test(int x) {
Stack s1 = new Stack();
Stack s2 = new Stack();
s1.push(x);
s2.push(x);
int p1 = s1.peek();
int p2 = s2.peek();
System.out.println(p1==p2);
System.out.println(s1.peek() == s2.peek());
}
如果x在[-128, 127],那么两次都会输出true;如果不是在这个范围,会输出true和false。
原因在于autobox,对于某些值,s1.push(x)会转化为s1.push(Integer.valueOf(x)),然后会利用cache的值,导致实例复用。
队列
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
LinkedList:底层使用双向链表存储,对于频繁的插入、删除操作效率更高
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queue queue = new LinkedList();
queue.offer("a");//添加元素
queue.poll();//第一个元素出队列,poll() 方法在用空集合调用时不是抛出异常,只是返回 null
queue.peek());//获得队首元素,不出队列。在队列为空时,peek() 返回 null。