前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java集合-Stack

Java集合-Stack

作者头像
后端码匠
发布2021-03-16 11:08:45
5130
发布2021-03-16 11:08:45
举报
文章被收录于专栏:后端码匠

Java集合-Stack

Stack(java.util.Stack)类是典型的栈数据结构,可以从头部插入,读取和移除元素。Stack是List接口的一个实现,但是很少使用Stack作为List- 除非需要检查当前存储在Stack中的所有元素。

注意,Stack类是Vector的子类,Vector是java中一个古老的同步类, 这种同步会增加对Stack中所有方法的调用的开销。另外,Vector还使用了几个古老的java部分(不再推荐),支持Iterator的Enumeration ,如果为了避免这种问题可以使用Deque。

Stack基础

Stack这数据结构,是可以在顶部加入元素,并且可以从顶部删除元素也就是我们说的"后进先出 (LIFO)"原子,相反的Queue采用的是"先进先出(FIFO)"原则,从尾部添加元素,从头部删除元素。

创建Stack

创建 Stack实例:

代码语言:javascript
复制
Stack stack = new Stack();

使用泛型创建Stack

创建Stack时可以指定泛型类型:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
Stack实例中只能包含String实例对象。

Stack添加元素

创建了Stack实例,就可以往顶部添加元素,添加的元素必须是Stack对象,使用push()方法添加元素:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
 
stack.push("1");

上面例子将String类型的“1”添加到Stack的顶部。

Stack取出并移除元素

如果往Stack中添加了元素,则也可以从中取出并移除元素,可以使用pop()方法:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
 
stack.push("1");
 
String topElement = stack.pop();

一旦调用了pop()方法,则Stack中就不存在此元素了。

从Stack顶部获取元素

可以调用Stack的peek() 方法查看Stack的第一个元素,而且并不移除元素:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
 
stack.push("1");
 
String topElement = stack.peek();

执行代码后topElement变量的值是“1”,而且还存在中。

搜索Stack中元素的位置

可以通过Stack的search()方法查找元素的位置,搜索时使用的是 equals()方法进行元素比较,如果元素在顶部则索引位置值为1:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
 
stack.push("1");
stack.push("2");
stack.push("3");
 
int index = stack.search("3");     //index = 3

Stack的大小

可以通过Stack的size()方法获取Stack中元素的个数:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
 
stack.push("1");
stack.push("2");
stack.push("3");
 
int size = stack.size();

执行代码后 size的值是3。

迭代 Stack中的元素

可以通过 Stack的iterator()方法获取Iterator,对Stack进行迭代:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
 
stack.push("123");
stack.push("456");
stack.push("789");
 
Iterator iterator = stack.iterator();
while(iterator.hasNext()){
    Object value = iterator.next();
}

使用Stream的进程Stack

也可以通过Stream Api处理上的元素。首先通过Stream()方法从堆栈获取流。一旦从Stack上获取了Stream,你们就可以迭代:

代码语言:javascript
复制
Stack<String> stack = new Stack<String>();
stack.push("A");
stack.push("B");
stack.push("C");
 
Stream stream = stack.stream();
 
stream.forEach((element) -> {
    System.out.println(element);  // print element
});

使用Stack反转List

可以使用Stack反正List,首先把List中的元素全部添加到中,然后将List清空,然后迭代Stack,将Stack中的元素取出并移除添加到List中:

代码语言:javascript
复制
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
System.out.println(list);
 
Stack<String> stack = new Stack<String>();
while(list.size() > 0) {
    stack.push(list.remove(0));
}
 
while(stack.size() > 0){
    list.add(stack.pop());
}
 
System.out.println(list);

使用Deque作为Stack

可以将Deque作为Stack使用,从头部添加和取出元素:

代码语言:javascript
复制
Deque<String> dequeAsStack = new ArrayDeque>String>();
 
dequeAsStack.push("one");
dequeAsStack.push("two");
dequeAsStack.push("three");
 
String one   = dequeAsStack.pop();
String two   = dequeAsStack.pop();
String three = dequeAsStack.pop();
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端码匠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Stack基础
  • 创建Stack
  • 使用泛型创建Stack
  • Stack添加元素
  • Stack取出并移除元素
  • 从Stack顶部获取元素
  • 搜索Stack中元素的位置
  • Stack的大小
  • 迭代 Stack中的元素
  • 使用Stream的进程Stack
  • 使用Stack反转List
  • 使用Deque作为Stack
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档