栈的基本功能

栈的最基本功能是保障后进先出,然后在此基础上可以对在栈中的对象进行弹入弹出,此外,在弹出时,如果栈为空,则会报错,所以还需要提供获取当前栈大小的方法。

构造存储对象Student

/*** Created by lili on 15/11/14.*/
public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (!(o instanceof Student)) return false;Student student = (Student) o;if (getAge() != student.getAge()) return false;return !(getName() != null ? !getName().equals(student.getName()) : student.getName() != null);}@Overridepublic int hashCode() {int result = getName() != null ? getName().hashCode() : 0;result = 31 * result + getAge();return result;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

这里重写了几个来自Object的方法,equals,hashCode和toString。

  1. equals方法:改变传统只看地址相同的比较,更深层的去按照对象内容来比较是否相等。
    可以看到equals方法的比较顺序,首先看地址是否一致,地址一致必定相等,无需再比较;再看比较对象的类型是否一致,不一致肯定不相等;由于传入的是Object对象,所以需要向下转型后比较属性。这里name是String类型的,由于String也有equal方法,所以比较name时会调用自己的equals,但是Student对象的name可能为null,所以这里在this.getName().equals()执行前需要判断this.getName()是否为null,如果不做判断,可能出现空指针异常。确保this.getName()不为空则调用getName().equals(student.getName()),此时无论student.getName()为null与否都可以做出正确判断。当this.getName()为null时,此时如果student.getName()也为null,则两个对象age一致时也返回true。
  2. hashcode方法:hashcode方法的存在是为了缓解equal的效率问题,当然此处没有用到。我们可以讲hashcode方法理解为对象的地址(默认是地址)。因为集合中判断两个对象是否相等如果只有equals,当对象很多时效率会非常低,例如当前有500个对象,在存储501个对象是,如果要保证对象不重复,则需要调用500次equals方法,此时如果用hashcode先将对象映射到不同的cube,然后同一个cube的再用链表存储,由于相同对象一定在同一cubu(不同对象也可以在同一个cube),所以最后equals比较的对象数目可以大大减少,这也是hashMap高效的原理所在。但是,如果hashcode方法不好,不能将对象分的比较散,所有对象都集中在几个cube的话,效率依然还是不好,所有hashcode是一个很关键的方法。
  3. toString方法:这个方法是为了打印对象的时候显示友好的内容,如果没有重写改方法,出现的则是对象名和地址

基本栈的实现

import java.util.LinkedList;/*** Created by lili on 15/11/14.*/
public class MyStack {private LinkedList linkedList;public MyStack() {linkedList = new LinkedList();}public void push(Object o) {linkedList.addFirst(o);}public Object pop() {//删除并返回return linkedList.removeFirst();}public boolean isEmpty() {return linkedList.isEmpty();}
}

转载于:https://www.cnblogs.com/gslyyq/p/4967046.html

【Java基础】用LinkedList实现一个简单栈的功能相关推荐

  1. Java基础编程题目——编写一个简单的银行账户类

    创建简单的银行账户类,包括开户人.账号和存款余额三个属性,以及查询余额.存款.取款等方法.创建两个账户验证类的设计. public class Banks {public static void ma ...

  2. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  3. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  4. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  5. 将Java程序变成可执行文件的一个简单方法

    将Java程序变成可执行文件的一个简单方法 运行Java程序(SWING或SWT的桌面程序)可以直接执行.class文件或将所有的.class文件及相关的其他文件压缩成.jar文件,然后使用javaw ...

  6. java 语言 写字板_一个简单的java语言写字板.docx

    一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...

  7. 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。

    开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加:(文件所在的目录不同,文 ...

  8. Android中实现一个简单的照相功能

    一个简单的照相功能,拍照之后在另一个activit中显示出拍照的图片. 首先是布局文件: <?xml version="1.0" encoding="utf-8&q ...

  9. 实现一个简单的投票功能

    实现一个简单的投票功能 最近项目中需要用到一个投票功能,当时觉得简单,向都没想就动手开始做,没想到走了不少弯路. 后来才发现,是想的太过简单了.来看看改进后的功能. 第一步:数据库设计 两个表:一个主 ...

最新文章

  1. 详解AI Lab 21篇CVPR 2018论文(附论文)
  2. Grails通过sessionId获取session对象
  3. Python实现递归算法
  4. winrar x64 3.93如何破解
  5. 京东进一步回应“承兴事件”:歌斐自身存在风控缺陷
  6. c语言符合语法规定的常量,以下各项中,符合C语言语法规定的实型常量是() 答案:.5E-3...
  7. 计算机的照相机功能,单反相机各个功能按键的作用,让你彻底熟悉相机-fn键设置...
  8. 华为员工去面试被淘汰后怒怼HR:华为出来的也能被拒,很无语
  9. 摘掉“爆雷”“二房东”的帽子,长租公寓有了新的生存法则
  10. 世界杯梦幻阵容HTML5代码,俄罗斯世界杯巴西梦幻阵容你必须知道!国足要进 只有这一个办法...
  11. 整数:求数组Nums中只出现一次的数
  12. c语言学生学籍管理修改,C语言课设之学生学籍管理系统.doc
  13. Show一下拿的奖杯
  14. 基于8086单片机的PWM调光(带汇编)
  15. 2022年网络信息安全工程师(NSACE)认证招生简章
  16. 用Python实现Flickr照片文本数据下载入库及图片保存(第一次帮忙)
  17. 使用IDEA打包项目(jar包和war包)
  18. 跨站脚本攻击—XSS
  19. Latex修改目录格式
  20. 简单学习:repo入门

热门文章

  1. 设置TextView为下划线的样式
  2. matlab imaqhwinfo
  3. QueryRunner使用
  4. homelede软路由设置方法_斐讯无线路由器怎么设置 斐讯无线路由器设置方法【详解】...
  5. Matlab在坐标点上按顺序标序号
  6. 阿米洛键盘取消win_阿米洛花旦娘静电容V2键盘测评:不止是一把好看的键盘
  7. 万字长文,解读“幕后产品”的核心观点
  8. python 渗透框架_Python渗透测试框架:PytheM
  9. html语言及语法结构,HTML语法结构.ppt
  10. windows server 2008 oracle 10g,一次不太愉快的Windows Server 2008 R2 SP1上安装ORACLE 10G经历...