上图是最最基本的结构,这次我采用数组实现栈。使用数组实现栈,由于java的数组是固定长度的。所以我需要写一个增加长度的方法。然后就是迭代的问题了。使用数组实现栈的话,我们需要写一个迭代器。不过这个迭代器非常容易实现,只需要让其implements Iterator再实现Iterator接口的方法就行。下边来看看源代码吧

import java.util.Iterator;
import java.util.Objects;public class TestStack {public static class stack<Item>{/*** 创建迭代器*/private  class ReverseArrayIterator implements Iterator<Item>{private int i=N;@Overridepublic boolean hasNext() {return i>0;}@Overridepublic Item next() {return a[--i];}@Overridepublic void remove() {}}private Item a[];private int N;public stack(int cap){//定义一个容量a=(Item[]) new Object[cap];}public Iterator<Item> iterator(){ //返回一个迭代器return new ReverseArrayIterator();}public boolean isEmpty(){//判断栈是否为空return N==0;}public int size(){//返回栈的元素数量return N;}public void push(Item item){//添加一个元素if(N==a.length) resize(2*a.length); //如果数组已满,就增加长度a[N++]=item;}public Item pop(){//删除最近添加的元素Item item=a[--N];// 删除栈顶元素a[N]=null;//避免对象游离if(N>0 && N==a.length/4) resize(a.length/2);return item;}private void resize(int max){//增加数组长度Item[] temp=(Item[]) new Objects[max];for(int i=0;i<N;i++){temp[i]=a[i];}a=temp;}}public static void main(String[] args) {stack<Integer> integerstack = new stack<Integer>(100);integerstack.push(123);integerstack.push(1);integerstack.push(13);integerstack.push(23);Iterator<Integer> iterator = integerstack.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}}
}

再来讲讲游离的问题吧

java中的垃圾回收策略是回收所有无法被访问的对象的内存。而上边pop()方法中被弹出的元素的引用其实还是存在在数组中。但是这个元素其实已经永远无法被访问了,但是java的垃圾收集器比较“机智”没办法知道这一点,除非该引用被覆盖不然他没办法被访问。所以这种保存一个不需要的对象的引用就是游离。在此避免游离的方法很简单就是给他赋值为null即可,这将覆盖无用的引用并使系统使用例被弹出的元素后回收它的内存。

复习---使用基础语法实现栈及迭代相关推荐

  1. 面向对象的程序设计C++课堂复盘总结 C语言复习+C++基础语法

    Stay Hungry,Stay Foolish. 任何人都能写出机器能看懂的代码,但只有优秀的程序员才能写出人能看懂的代码. 有两种写程序的方式:一种是把代码写得非常复杂,以至于 "看不出 ...

  2. Java快速提升_java快速复习 一 基础语法

    最近看很多算法书,比较不错的有不少都是java语言描述,所以用一天时间快速研究并整理java  ,参考资料:java入门经典 Call this file "Example2.java&qu ...

  3. 【阿里内部教程】python初阶:基础语法 python全栈自动化测试系类

    目录 很多小伙伴可能都没有看过凡哥的视频,所以大家可能对凡哥不是很了解这里先和大家来个自我介绍 凡哥我已经有着十二年互联网自动化测试和测试开发工程师,拥有丰富的自动化测试平台及测试开发经验,擅长接口测 ...

  4. python global用法_【python测试开发栈】python基础语法大盘点

    周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...

  5. Java基础语法总复习

    前言: 对于Java基础语法部分目前就告一段落啦,系列文章目录是之前写过的部分笔记,当然,这些目录中只涉及了我初学时认为应当总结概括的或者知识点较多的章节,对于此篇文章中未细细考究的内容大家可以由系列 ...

  6. 复习Java入门与基础语法生活【记录一个咸鱼大学生三个月的奋进生活】002

    复习Java(入门) 既然是入门那就必须讲个故事了:   其实Java是James Gosling为了跨平台而创造的,当时(1991年)SUN公司想在智能家电中大展宏图,结果发现想完成智能家电用C是不 ...

  7. python基础语法复习[二] 函数、类

    python基础语法复习[二] 前言 一.函数 1.基本概念 2.一般实例 3.参数传递 (1)传不可变对象 (2)传可变对象 4.函数递归调用实例 (1)eg:实现字符串的反转: (2)递归思想画树 ...

  8. 编程类-----matlab基础语法复习(1)

    2019年美赛随笔记录: 具体功能:基础语法+基本运算+画图+矩阵+excel读取....... 所遇问题及其解决方案:         1.   que:matlab中plot画图无法复制下来图片? ...

  9. C/C++基础语法复习(一):C++与C语言的区别,主要有这些!

    和C的区别: 1.概念: C++ 是一种静态类型的.编译式的.通用的.大小写敏感的.不规则的编程语言,支持过程化编程.面向对象编程和泛型编程. C++ 被认为是一种中级语言,它综合了高级语言和低级语言 ...

最新文章

  1. Logic-算法-八个箱子找一个最轻的
  2. 结构化数据存储,如何设计才能满足需求?
  3. ibm服务器更换主板怎么恢复系统,记号一次更换IBM X3650M4主板后RAID无法启动的解决...
  4. css颜色 333是什么颜色,纯css实现的颜色扇附图
  5. oracle structure,oracle memory structure
  6. 山重水复 Thinkpad T61改装记
  7. Dead Pixel
  8. MySQL-第七讲:数据库编程
  9. python转换js_将节点js转换为python-seri
  10. 数据库发展的三个阶段及特点
  11. 真正的程序员到底应该是什么样子的?
  12. java哪些类重写equals方法_Java自定义类中重写equals方法
  13. 配置测试,你了解吗?
  14. 收废品小程序的推广策略与实践
  15. java编程成绩评分分等级_java编写成绩等级,最高分为best
  16. C++进制转换程序(二进制转换为十进制,十进制转换为二进制)
  17. Jenkins+Gitlab+Ansible自动化部署(四)
  18. 一个注册、登陆系统的实现
  19. mysql max_allowed_packet 到底什么意思
  20. GitHub 从零开始的保姆级使用教程

热门文章

  1. Kubernetes在上汽集团云平台及AI方面的应用
  2. 视频通信原理——NAT介绍
  3. StoreServ的ASIC架构师必须面向未来做出决断
  4. Jquery实战——横纵向的菜单
  5. HDOJ---2546 饭卡[DP01背包问题]
  6. 【博客话题】坚持的背影--记我的入门老师
  7. 成为项目经理需要具备什么条件?
  8. jupyter notebook 安装代码提示功能
  9. MyEclipse2014破解
  10. struts2访问jsp页面404