javalengthsize Stack 的size方法

Java 集合系列07之 Stack详细介绍(源码解析)和使用示例 - 如果天空不死 - 博客园
随笔 - 278
评论 - 1121
学完了之后,接下来我们开始学习Stack。Stack很简单,它继承于Vector。学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码;最后再通过实例来学会使用它。内容包括:
转载请注明出处:
第1部分 Stack介绍
Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。
java工具包中的Stack是继承于(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用!在&&中,已经详细介绍过Vector的数据结构,这里就不再对Stack的数据结构进行说明了。
Stack的继承关系
java.lang.Object
java.util.AbstractCollection&E&
java.util.AbstractList&E&
java.util.Vector&E&
java.util.Stack&E&
public class Stack&E& extends Vector&E& {}
Stack和Collection的关系如下图:
Stack的构造函数
Stack只有一个默认构造函数,如下:
Stack的API
Stack是栈,它常用的API如下:
synchronized E
synchronized E
push(E object)
synchronized int
search(Object o)
由于Stack和继承于Vector,因此它也包含Vector中的全部API。
第2部分 Stack源码解析(基于JDK1.6.0_45)
Stack的源码非常简单,下面我们对它进行学习。&
1 package java.
4 class Stack&E& extends Vector&E& {
// 版本ID。这个用于版本升级控制,这里不须理会!
private static final long serialVersionUID = 1339165L;
// 构造函数
public Stack() {
// push函数:将元素存入栈顶
public E push(E item) {
// 将元素存入栈顶。
// addElement()的实现在Vector.java中
addElement(item);
// pop函数:返回栈顶元素,并将其从栈中删除
public synchronized E pop() {
len = size();
obj = peek();
// 删除栈顶元素,removeElementAt()的实现在Vector.java中
removeElementAt(len - 1);
// peek函数:返回栈顶元素,不执行删除操作
public synchronized E peek() {
len = size();
if (len == 0)
throw new EmptyStackException();
// 返回栈顶元素,elementAt()具体实现在Vector.java中
return elementAt(len - 1);
// 栈是否为空
public boolean empty() {
return size() == 0;
// 查找&元素o&在栈中的位置:由栈底向栈顶方向数
public synchronized int search(Object o) {
// 获取元素索引,elementAt()具体实现在Vector.java中
int i = lastIndexOf(o);
if (i &= 0) {
return size() -
return -1;
(01) Stack实际上也是通过数组去实现的。& & & &执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。& & & &执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。& & & &执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。(02) Stack继承于Vector,意味着Vector拥有的属性和功能,Stack都拥有。
第3部分 Vector示例
下面我们通过实例学习如何使用Stack
1 import java.util.S
2 import java.util.I
3 import java.util.L
* @desc Stack的测试程序。测试常用API的用法
* @author skywang
10 public class StackTest {
public static void main(String[] args) {
Stack stack = new Stack();
// 将1,2,3,4,5添加到栈中
for(int i=1; i&6; i++) {
stack.push(String.valueOf(i));
// 遍历并打印出该栈
iteratorThroughRandomAccess(stack) ;
// 查找&2&在栈中的位置,并输出
int pos = stack.search("2");
System.out.println("the postion of 2 is:"+pos);
// pup栈顶元素之后,遍历栈
stack.pop();
iteratorThroughRandomAccess(stack) ;
// peek栈顶元素之后,遍历栈
String val = (String)stack.peek();
System.out.println("peek:"+val);
iteratorThroughRandomAccess(stack) ;
// 通过Iterator去遍历Stack
iteratorThroughIterator(stack) ;
* 通过快速访问遍历Stack
public static void iteratorThroughRandomAccess(List list) {
String val = null;
for (int i=0; i&list.size(); i++) {
val = (String)list.get(i);
System.out.print(val+" ");
System.out.println();
* 通过迭代器遍历Stack
public static void iteratorThroughIterator(List list) {
String val = null;
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
val = (String)iter.next();
System.out.print(val+" ");
System.out.println();
运行结果:&
the postion of 2 is:4
阅读(...) 评论()java中怎么知道stack中元素数量_百度知道
java中怎么知道stack中元素数量
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
育知同创教育
百度知道合伙人官方认证企业
育知同创教育
1、【专注:Python+人工智能|Java大数据|HTML5培训】。 2、【免费提供名师直播课堂、公开课及视频教程】。 3、【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
java.util.Stack 类的构造方法创建对象这个类里面有这个方法public peek() 查看栈顶对象而不移除它。。Stack&Integer& s = new Stack&Integer&();for (Integer x : s) {System.out.println(x);}
Stack&Integer&&stk&=&new&Stack&Integer&();
System.out.println(stk.size());
stk.push(5);
stk.push(6);
stk.push(7);
System.out.println(stk.size());
1条折叠回答
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。什么是堆栈,关于这个名词,我在百度,google搜索了半天,也没有发现一个比较权威的解释,还有许多资料语焉不详,就以维基百科的解释为准吧,和我记忆中的一致。
堆栈(英文:stack),中国大陆作堆栈,台湾作堆叠,在计算机科學中,是一種特殊的串列形式的資料結構,它的特殊之處在於只能允許在鏈結串列或陣列的一端(稱為堆疊頂端指標,英文為top)進行加入資料(push)和輸出資料(pop)的運算。另外堆疊也可以用一維陣列或連結串列的形式來完成。堆疊的另外一個相對的操作方式稱為佇列。 由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(LIFO,& Last In First Out)的原理運作。
堆疊資料結構使用兩種基本操作:推入(push)和彈出(pop): 推入(push)& :將數據放入堆疊的頂端(陣列形式或串列形式),堆疊頂端top指標加一。 彈出(pop)& :將頂端數據資料輸出(回傳),堆疊頂端資料減一。
下面是用java数组实现堆栈
publicclass Stack {&&&&&&&
& Object[]&
& int maxS&&&
& int&&&&&&&
& public Stack(int maxSize) {&&&&&&&
&&&&& this.maxSize = maxS&&&&&&&
&&&&& data = new Object[maxSize];&&&&&&&
&&&&& top = -1;&&&&&&&
& }&&&&&&&
& publicint getSize()&
&&& return maxS&
& publicint getElementCount()&
&&& return&
& publicboolean isEmpty()&
&&& return top == -1;&
& publicboolean isFull()&
&&& return top+1 == maxS&
& publicboolean push(Object data) {&&&&&&&
&&& if(isFull())&&
&&& {&&&&&&&
&&&&&&& System.out.println("栈已满!");&&&&&&&
&&&&&&& returnfalse;&&&&&&&
&&& }&&&&&&&
&&& this.data[++top] =&&&&&&&
&&& returntrue;&&&&&&&
& }&&&&&&&
& public Object pop() throws Exception{&&&&&&&
&&& if(isEmpty())&&
&&& {&&&&&&&
&&&&&&& thrownew Exception("栈已空!");&&&&&&&
&&& }&&&&&&&
&&& returnthis.data[top--];&&&&&&&
& }&&&&&&&
& public Object peek()&
&&& returnthis.data[getElementCount()];&&&
& publicstaticvoid main(String[] args) throws Exception {&&&&&&&
&&&&& Stack stack=new Stack(1000);&&&&&&&
&&&&& stack.push(new String("1"));&&&&&&&
&&&&& stack.push(new String("2"));&&&&&&&
&&&&& stack.push(new String("3"));&&&&&&&
&&&&& stack.push(new String("4"));&&&&&&&
&&&&& stack.push(new String("5"));&&&
&&&&& System.out.println(stack.peek());&&
&&&&&&&&&&&&&
&&&&& while(stack.top&=0)&&&&&&&
&&&&& {&&&&&&&
&&&&&&&&& System.out.println(stack.pop());&&&&&&&
&&&&& }&&&&&&&&&&&&&&
& }&&&&&&&
* 使用数组实现堆栈,包括入栈、出栈、获取堆栈长度、
* @author Adair
public class Stack {
//栈顶位置
public Stack(int maxSize) {
this.maxSize = maxS
data = new Object[maxSize];
* 获取堆栈长度
* @return 堆栈长度
public int getSize()
return maxS
* 返回栈中元素的个数
* @return 栈中元素的个数
public int getElementCount()
* 判断栈空
* @return 栈空
public boolean isEmpty()
return top == -1;
* 判断栈满
* @return 栈满
public boolean isFull()
return top+1 == maxS
* 依次加入数据
* @param data 要加入的数据通信
* @return 添加是否成功
public boolean push(Object data) {
if(isFull())
System.out.println("栈已满!");
this.data[++top] =
* 从栈中取出数据
* @return 取出的数据
public Object pop() throws Exception{
if(isEmpty())
throw new Exception("栈已空!");
return this.data[top--];
* 返回栈顶元素
public Object peek()
return this.data[getElementCount()];
public static void main(String[] args) throws Exception {
Stack stack=new Stack(1000);
stack.push(new String("1"));
stack.push(new String("2"));
stack.push(new String("3"));
stack.push(new String("4"));
stack.push(new String("5"));
System.out.println(stack.peek());
while(stack.top&=0)
System.out.println(stack.pop());
阅读(...) 评论() &什么是堆栈,关于这个名词,我在百度,google搜索了半天,也没有发现一个比较权威的解释,还有许多资料语焉不详,就以维基百科的解释为准吧,和我记忆中的一致。堆栈(英文:stack),中国大陆作堆栈,台湾作堆叠,在计算机科學中,是一種特殊的串列形式的資料結構,它的特殊之處在於只能允許在鏈結串列或陣列的一端(稱為堆疊頂端指標,英文為top)進行加入資料(push)和輸出資料(pop)的運算。另外堆疊也可以用一維陣列或連結串列的形式來完成。堆疊的另外一個相對的操作方式稱為佇列。 由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(LIFO,
Last In First Out)的原理運作。堆疊資料結構使用兩種基本操作:推入(push)和彈出(pop): 推入(push)
:將數據放入堆疊的頂端(陣列形式或串列形式),堆疊頂端top指標加一。 彈出(pop)
:將頂端數據資料輸出(回傳),堆疊頂端資料減一。下面是用java数组实现堆栈涛哥分类:
Stack 的 java 实现
没有更多推荐了,java.lang.StackOverflowError:&stack&size&8MB_wangcancc_新浪博客
java.lang.StackOverflowError:&stack&size&8MB
java.lang.StackOverflowError: stack size 8MB
出现这种异常,大多是由于循环调用。
出现场景:在本方法中调用本方法。​
博客等级:
博客积分:0
博客访问:139,055
关注人气:0
荣誉徽章:

我要回帖

更多关于 javasize 的文章

 

随机推荐