栈的基本功能

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

构造存储对象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. 分库分表 springboot+dubbo+mybatisPlus+shardingSphere
  2. 深度增强学习前沿算法思想
  3. yum安装出现No package vim available解决办法
  4. java作为kafka生产者实验及Expiring超时问题解决
  5. Linux系统下.ko文件是什么文件?.so文件是什么文件?
  6. sql server 日期类型
  7. 《剑指Offer》 二叉树的镜像
  8. excel批量导入数据
  9. mysql explain索引_mysql 索引+explain
  10. 读C陷阱和缺陷(C Traps and Pitfalls)(一)
  11. 【矩阵乘法】外部矩阵乘法
  12. FFmpeg 以及帧率的解释
  13. Reno与RACK对丢失/重传报文的标记
  14. STM32CUBE——使用DWT提供毫秒延迟
  15. 163VIP邮箱如何注册?163VIP企业邮箱申请介绍!
  16. 干货推荐 :Stata软件基本操作和数据分析入门
  17. 22个Python迷你程序,最适合你拿来学习练手了
  18. html 给div设置高度,div高度设置 DIV 高度篇
  19. JDK1.5新特性--自动装箱与拆箱
  20. 全国计算机等级考试(三级网络)基本概念与名词解释

热门文章

  1. IMPDP导入实例(oracle)
  2. C/C++中无条件花括号的妙用
  3. 多线程多进程解析:Python、os、sys、Queue、multiprocessing、threading
  4. Mathematics 9.0 绘制不等式确定的区域
  5. C++ Socket编程步骤
  6. 友声电子秤设置软件_友声电子秤说明书/操作指南?(一)
  7. 纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...
  8. ug11 linux,UG11.0升级包MP02Win#Linux系统下载就上UG网
  9. 【APICloud系列|8】APICloud下载编译包安装,点击图标打不开,提示很抱歉,程序出现异常,即将退出
  10. kail利用msf工具对ms17-010(永恒之蓝)漏洞入侵渗透Win7