java.util.Stack的简介

3 篇文章 0 订阅
2 篇文章 0 订阅
Stack是一种后进先出(LIFO)的结构,其继承了Vector的基础上拓展5个方法push()、pop()、peek()、empty()、search()而来
1、push(E):将item推入到栈中
2、pop() :将栈中的最顶一个item推出,并返回被推出的item
3、peek():返回栈中最顶的一个item,但不对其做任何操作
4、empty():判断该栈是否为空
5、search(Object):搜索某一个item在该栈中的位置【位置为离栈顶最近的item与栈顶间距离】

PS:虽然Java有提供该类型的数据结构,但是官方推荐使用Deque【 双端队列】,Deque提供更好的完整性和一致性,应该优先使用。

Stack类源码:
public class Stack<E> extends Vector<E> {
/**
* Creates an empty Stack.
*/
public Stack() {
}

/**
* 将item推入到栈中
*/
public E push(E item) {
addElement(item);

return item;
}

/**
将栈中的最顶一个item推出,并返回被推出的item
*/
public synchronized E pop() {
E obj;
int len = size();

obj = peek();
removeElementAt(len - 1);

return obj;
}

/**
返回栈中最顶的一个item,但不对其做任何操作
*/
public synchronized E peek() {
int len = size();

if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}

/**
* 判断是否为空
*/
public boolean empty() {
return size() == 0;
}

/**
搜索某一个item在该栈中的位置【位置为离栈顶最近的item与栈顶间距离】
*/
public synchronized int search(Object o) {
int i = lastIndexOf(o);

if (i >= 0) {
return size() - i;
}
return -1;
}

/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = 1224463164541339165L;
}

1、通过源码发现,Vector类在初始化的时候,会构造一个大小为10是空间

2、Stack中的pop、peek、search为线程安全类型
3、
  • 时间复杂度:
  • 索引: O(n)
  • 搜索: O(n)
  • 插入: O(1)
  • 移除: O(1)

基本使用:
public class Test {

public static void main(String[] args){
Stack<String> stack = new Stack<>();
System.out.println("数量:"+stack.size());
stack.push("100");
stack.push("200");
stack.push("300");
for(int i = 0; i <stack.size(); i++){
System.out.println("stack值:"+stack.get(i));
}
System.out.println("数量:"+stack.size());
List<String> stack_list = stack.subList(0,2);
for(String str : stack_list){
System.out.println("stack_list截取值:"+str);
}
System.out.println("搜索100结果:"+stack.search("300"));
}
}


结果:
数量:0
stack值:100
stack值:200
stack值:300
数量:3
stack_list截取值:100
stack_list截取值:200
搜索100结果:1
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值