Java stack 怎么继续往下看找?

java学习笔记——自定义实现Stack集合
public class MyStack&E& {&
&&& private Object[] // 声明一个object类型的数组&&
&&& // 数组中实际的元素个数&&
&&& public MyStack() {&
&&&&&&& elements = new Object[10]; // 初始长度为10&&
&&& // 检查堆栈是否为空&&
&&& public boolean empty() {&
&&&&&&& return size == 0; // 元素个数为0返回true,否则返回false。&&
&&& // 查看堆栈顶部的对象&&
&&& public E peek() {&
&&&&&&& //如果没有元素返回null&&
&&&&&&& if (empty()) {&
&&&&&&&&&&&&&
&&&&&&& }&
&&&&&&& //如果有元素就返回最后一个&&
&&&&&&& return (E) elements[size - 1];&
&&& // 移除堆栈顶部的对象&&
&&& public E pop() {&
&&&&&&& E e = peek(); //拿到最后一个元素的备份&&
&&&&&&& elements[size - 1] =& //给数组最后一个元素赋null值&&
&&&&&&& size--; //元素个数减1&&
&&& // 把项压入堆栈顶部。&&
&&& public E push(E item) {&
&&&&&&& ensureCapacity(size + 1); //检查容量&&
&&&&&&& elements[size++] =& //保存传进来的元素,元素个数自增1&&
&&& // 检查容量是否足够,不够再原有的数组基础创建新的数组&&
&&& private void ensureCapacity(int size) {&
&&&&&&& int len = elements. //获得数组现在的长度&&
&&&&&&& if (size & len) {&
&&&&&&&&&&& int newLen = (len * 3) / 2 + 1; //每次数组扩充的容量&&
&&&&&&&&&&& elements = Arrays.copyOf(elements, newLen);&
&&&&&&& }&
&&& // 返回对象在堆栈中的位置,以1 为基数&&
&&& public int search(Object o) {&
&&&&&&& int index = lastIndexOf(o); //得到元素在数组里的下标&&
&&&&&&& return index == -1 ? index : size -&&
&&& // 查找下标的方法&&
&&& private int lastIndexOf(Object o) {&
&&&&&&& if (empty()) {&
&&&&&&&&&&& throw new EmptyStackException(); //如果数组为空,就抛出一个自定义异常&&
&&&&&&& }&
&&&&&&& //当传进来的元素为空时&&
&&&&&&& if (o == null) {&
&&&&&&&&&&& for (int i = size - 1; i &= 0; i--) {&
&&&&&&&&&&&&&&& if (elements[i] == null) {&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& }&
&&&&&&&&&&& }&
&&&&&&& //不为空时&&
&&&&&&& } else {&
&&&&&&&&&&& for (int i = size - 1; i &= 0; i--) {&
&&&&&&&&&&&&&&& if (o.equals(elements[i])) {&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& }&
&&&&&&&&&&& }&
&&&&&&& }&
&&&&&&& return -1; // 没有找到,返回-1&&
&&& // 自定义异常&&
&&& private static class EmptyStackException extends RuntimeException {&
&&&&&&& public EmptyStackException() {&
&&&&&&&&&&& super(&堆栈为空&);&
&&&&&&& }&* 栈:桶型或箱型数据类型,后进先出,相对堆Heap为二叉树类型,可以快速定位并操作
* Stack,支持泛型
* public class Stack extends Vector
* Stack的方法调用的Vector的方法,被synchronized修饰,为线程安全(Vector也是
* 栈:桶型或箱型数据类型,后进先出,相对堆Heap为二叉树类型,可以快速定位并操作
* Stack&E&,支持泛型
* public class Stack&E& extends Vector&E&
* Stack的方法调用的Vector的方法,被synchronized修饰,为线程安全(Vector也是)
* Stack methods:
* push : 把项压入堆栈顶部 ,并作为此函数的值返回该对象
* pop : 移除堆栈顶部的对象,并作为此函数的值返回该对象
* peek : 查看堆栈顶部的对象,,并作为此函数的值返回该对象,但不从堆栈中移除它
* empty : 测试堆栈是否为空
* search : 返回对象在堆栈中的位置,以 1 为基数
操作代码为下:
package ca.
import java.util.S
public class StackX {
public static void main(String[] args) {
stackMethod();
//stack operate
public static void stackMethod(){
//定义一个Integer泛型的Stack
Stack&Integer& stack = new Stack&Integer&();
System.out.println("新建栈stack是否为空 : "+(stack.empty() ? "空" : stack.size()));
//push : 把项压入堆栈顶部,返回值泛型指定的类型
//此处将1到5压入栈中
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println("将1到5按顺序压入栈中后为:"+stack);
//empty : 测试堆栈是否为空,size() == 0,返回值boolean
System.out.println("值为1~5的栈中stack是否为空 : "+(stack.empty() ? "空" : stack.size()));
//search : 返回对象在堆栈中的位置,以 1 为基数,参数:search(Object o) ,返回值int
int oStack = stack.search(3);
System.out.println("查找栈stack中对象3的位置elementId为 : "+oStack);
//peek : 查看堆栈顶部的对象,但不从堆栈中移除它,返回值泛型指定的类型
int topElement =stack.peek();
System.out.println("查看stack的栈顶元素为 : "+topElement);
System.out.println("peek操作stack后为 : "+stack);
//pop : 移除堆栈顶部的对象,并作为此函数的值返回该对象,返回值泛型指定的类型
int oRemove = stack.pop();
System.out.println("移除stack栈顶的元素为 : "+oRemove);
System.out.println("pop操作移除stack栈顶元素后为 : "+stack);
新建栈stack是否为空 : 空
将1到5按顺序压入栈中后为:[1, 2, 3, 4, 5]
值为1~5的栈中stack是否为空 : 5
查找栈stack中对象3的位置elementId为 : 3
查看stack的栈顶元素为 : 5
peek操作stack后为 : [1, 2, 3, 4, 5]
移除stack栈顶的元素为 : 5
pop操作移除stack栈顶元素后为 : [1, 2, 3, 4]
Stack的toString()方法继承自Vector的toString()方法;
Vector的toString()方法super.toString()继承自AbstractList继承自AbstractCollection的toString()方法:
public String toString() {
Iterator&E& i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
若集合为空,返回
若集合不为空则 [
加上迭代元素 加上 , 最后集合无元素加上 ] eg:[1, 2, 3, 4]
版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至: 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】阿里云数据库MySQL金融版发布,实现日志多副本同步复制,提供金融级可靠性!8月10日,阿里云数据库掌门人褚霸等大牛直播,揭开它的背后故事!赶紧报名吧&&
操作审计(ActionTrail)会记录您的云账户资源操作,提供操作记录查询,并可以将记录文件保存到您指定的OS...
通过在客户自己的数据中心内交付完整的阿里云软件堆栈,阿里云专有云帮助政企客户向混合云架构平滑演进,实现从IT时代...
针对日志类数据的一站式服务,用户无需开发就能快捷完成数据采集、消费、投递以及查询分析等功能,帮助提升运维、运营效...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
2017杭州云栖大会火热抢票
Loading...Java涓璕untime.exec鐨勪竴浜涗簨 - 瀵绘壘灏忓寘瀛}

我要回帖

更多关于 继续往下看 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信