JAVA中栈的基本操作

栈的基本操作

栈是一种先进后出的数据结构
常用方法:
isEmpty();//栈是否为空
peek();//查询栈顶元素,不变栈
pop();//弹出栈顶元素,改变栈
push();//压入栈顶
size();//栈中元素的个数

		Stack<Integer> stack = new  Stack<Integer>();
		//判断空栈
		if(stack.isEmpty()){
	     	System.out.println("空栈");	
		}
		//压入元素
		stack.push(1);
		stack.push(2);
		stack.push(3);
		//栈存储元素的个数
		System.out.println(stack.size());
		//输出栈顶元素不删除
		System.out.println(stack.peek());
		//输出栈顶元素并删除
		System.out.println(stack.pop());
		System.out.println("弹出一个元素后剩余栈的高度:"+stack.size());
		//输出栈  返回栈的字符 [,,,,]数组形式
		System.out.println(stack);
		//查看元素在栈中的位置,在栈中从上往下数
		System.out.println("1在栈中的位置:"+stack.search(1));
		//add方法也是向栈顶添加一个元素,返回值为true
		System.out.println(stack.add(3));
		System.out.println(stack);
		//addElement等价于push 
		stack.addElement(4);
		System.out.println(stack);
		//栈的遍历,从栈顶挨个弹出元素
		while(!stack.isEmpty()){
			System.out.println(stack.pop());
		}

push()和add()和addElement的区别

向栈顶添加元素有push和add和addElement ,说说他们的区别
push是java标准栈中的向栈顶压入元素,看Stack源码:

	public Object push(Object obj) {
		addElement(obj);
		return obj;
	}

实际上push和addElement是一样的

再看看他们的继承关系

public class Stack extends Vector 
public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable
public interface List extends Collection 

addElement是Vector类中特有的方法,实现如下

	public synchronized void addElement(Object obj) {
		modCount++;
		ensureCapacityHelper(elementCount + 1);
		elementData[elementCount++] = obj;
	}

实际上就是数组的长度加1将元素添加在数组尾部
至于add方法的实现也是在Vector类中,它是实现list接口中的add的抽象方法
在List接口中定义如下:

public abstract boolean add(Object obj);

在Vector类中实现如下:

	public synchronized boolean add(Object obj) {
		modCount++;
		ensureCapacityHelper(elementCount + 1);
		elementData[elementCount++] = obj;
		return true;
	}

可以看到实现方式是一直的,只不过add方法有返回值为true
由此可见这三种方法都是向栈顶压入元素

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值