【Java基础】用LinkedList实现一个简单栈的功能
栈的基本功能
栈的最基本功能是保障后进先出,然后在此基础上可以对在栈中的对象进行弹入弹出,此外,在弹出时,如果栈为空,则会报错,所以还需要提供获取当前栈大小的方法。
构造存储对象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。
- 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。 - hashcode方法:hashcode方法的存在是为了缓解equal的效率问题,当然此处没有用到。我们可以讲hashcode方法理解为对象的地址(默认是地址)。因为集合中判断两个对象是否相等如果只有equals,当对象很多时效率会非常低,例如当前有500个对象,在存储501个对象是,如果要保证对象不重复,则需要调用500次equals方法,此时如果用hashcode先将对象映射到不同的cube,然后同一个cube的再用链表存储,由于相同对象一定在同一cubu(不同对象也可以在同一个cube),所以最后equals比较的对象数目可以大大减少,这也是hashMap高效的原理所在。但是,如果hashcode方法不好,不能将对象分的比较散,所有对象都集中在几个cube的话,效率依然还是不好,所有hashcode是一个很关键的方法。
- 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实现一个简单栈的功能相关推荐
- Java基础编程题目——编写一个简单的银行账户类
创建简单的银行账户类,包括开户人.账号和存款余额三个属性,以及查询余额.存款.取款等方法.创建两个账户验证类的设计. public class Banks {public static void ma ...
- java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)
java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...
- java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...
- java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...
- 将Java程序变成可执行文件的一个简单方法
将Java程序变成可执行文件的一个简单方法 运行Java程序(SWING或SWT的桌面程序)可以直接执行.class文件或将所有的.class文件及相关的其他文件压缩成.jar文件,然后使用javaw ...
- java 语言 写字板_一个简单的java语言写字板.docx
一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...
- 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加:(文件所在的目录不同,文 ...
- Android中实现一个简单的照相功能
一个简单的照相功能,拍照之后在另一个activit中显示出拍照的图片. 首先是布局文件: <?xml version="1.0" encoding="utf-8&q ...
- 实现一个简单的投票功能
实现一个简单的投票功能 最近项目中需要用到一个投票功能,当时觉得简单,向都没想就动手开始做,没想到走了不少弯路. 后来才发现,是想的太过简单了.来看看改进后的功能. 第一步:数据库设计 两个表:一个主 ...
最新文章
- 详解AI Lab 21篇CVPR 2018论文(附论文)
- Grails通过sessionId获取session对象
- Python实现递归算法
- winrar x64 3.93如何破解
- 京东进一步回应“承兴事件”:歌斐自身存在风控缺陷
- c语言符合语法规定的常量,以下各项中,符合C语言语法规定的实型常量是() 答案:.5E-3...
- 计算机的照相机功能,单反相机各个功能按键的作用,让你彻底熟悉相机-fn键设置...
- 华为员工去面试被淘汰后怒怼HR:华为出来的也能被拒,很无语
- 摘掉“爆雷”“二房东”的帽子,长租公寓有了新的生存法则
- 世界杯梦幻阵容HTML5代码,俄罗斯世界杯巴西梦幻阵容你必须知道!国足要进 只有这一个办法...
- 整数:求数组Nums中只出现一次的数
- c语言学生学籍管理修改,C语言课设之学生学籍管理系统.doc
- Show一下拿的奖杯
- 基于8086单片机的PWM调光(带汇编)
- 2022年网络信息安全工程师(NSACE)认证招生简章
- 用Python实现Flickr照片文本数据下载入库及图片保存(第一次帮忙)
- 使用IDEA打包项目(jar包和war包)
- 跨站脚本攻击—XSS
- Latex修改目录格式
- 简单学习:repo入门
热门文章
- 设置TextView为下划线的样式
- matlab imaqhwinfo
- QueryRunner使用
- homelede软路由设置方法_斐讯无线路由器怎么设置 斐讯无线路由器设置方法【详解】...
- Matlab在坐标点上按顺序标序号
- 阿米洛键盘取消win_阿米洛花旦娘静电容V2键盘测评:不止是一把好看的键盘
- 万字长文,解读“幕后产品”的核心观点
- python 渗透框架_Python渗透测试框架:PytheM
- html语言及语法结构,HTML语法结构.ppt
- windows server 2008 oracle 10g,一次不太愉快的Windows Server 2008 R2 SP1上安装ORACLE 10G经历...