【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;
} @Override
public 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); } @Override
public int hashCode() {
int result = getName() != null ? getName().hashCode() : 0;
result = 31 * result + getAge();
return result;
} @Override
public 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();
}
}
【Java基础】用LinkedList实现一个简单栈的功能的更多相关文章
- (转)Java中使用正则表达式的一个简单例子及常用正则分享
转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...
- JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。
编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...
- 【java基础】IOC介绍及其简单实现
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...
- javaSE基础之 LinkedList的底层简单实现
这里贴上LinkedList底层的简单实现 package com.yck.mylinkedlist; public class Node { private Node previous; //上一结 ...
- 原生js实现一个简单的倒计时功能
大家好,我是云中君!欢迎大家来观看我的博客 之前那,在群里看到很多人问,关于电商网站中的倒计时功能怎么实现,很多人说在网上找了很多插件,但是不是很会用,所以今天就在这里分享一下我封装的一个小的倒计时功 ...
- Java经典实例:实现一个简单堆栈
堆栈(Stack)是一种常见的数据结构,符合后进先出(First In Last Out)原则,通常用于实现对象存放顺序的逆序.栈的基本操作有push(添加到堆栈),pop(从堆栈删除),peek(检 ...
- java基础之JDBC三:简单工具类的提取及应用
简单工具类: public class JDBCSimpleUtils { /** * 私有构造方法 */ private JDBCSimpleUtils() { } /** * 驱动 */ publ ...
- java基础学习之内存分析(栈、堆、方法区)
栈存放:会为每个方法(包括构造函数)开辟一个栈指针,方法执行完毕后,会自动退出,并释放空间,主要每个方法中的存放局部变量 局部变量 先进后出 自下而上存储 方法执行完毕 自动释放空间 堆: 存放n ...
- 【死磕 Java 基础】— 我同事一个 select 分页语句查出来了 3000W 条数据
大家好,我是大明哥,一个专注于[死磕 Java]系列创作的男人 个人网站:https://www.cmsblogs.com/.专注于 Java 优质系列文章分享,提供一站式 Java 学习资料 某天我 ...
随机推荐
- [python]使用ElementTree解析XML【译】
19.7 The ElementTree XML API 源码:Lib/xml/etree/ElementTree.py Element类型是一个灵活的容器对象,设计出来是用于存储有层次的数据结构到内 ...
- SqlBulkCoy和普通数据库操作执行速度对比
SQLBulkCopy,用于数据库之间大批量的数据传递.通常用于新,旧数据库之间数据的更新.即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来. 1.初始化SqlBulkCopy对象, ...
- 2014年辛星完全解读Javascript第一节
***************概述*************** 1.Javascript是一种原型化继承的基于对象的动态类型的脚本语言,它区分大小写,主要运行在客户端,用户即使响应用户的操作并进行数 ...
- 批量将MP4 转换为 MP3
0 需要先下载VLC 软件 1 win+R 运行 "CMD" 2 CD mp4目录 3 复制 并运行下面代码 for %%a in (*.mp4) do "C:\Prog ...
- iOS工程引入ios-charts-master
前一段时间看到一个非常好的例子ios-charts-master,想在自己的工程中引用,但是一直没有成功,即使把整个工程原封不动的搬过来仍然,无济于事. 经过一次意外研究,终于成功了. 特记下集成过程 ...
- HTTP错误 404.17
HTTP错误 404.17 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理 出现这种情况的原因通常是因为先安装了Framework,后 ...
- 异步IO模型和Overlapped结构
.NET中的 Overlapped 类 异步IO模型和Overlapped结构(http://blog.itpub.net/25897606/viewspace-705867/) 数据结构 OVERL ...
- 安装,卸载或重装Vmware Workstation时失败的官方解决方案
最近VMware Workstation又放出更新,遂更新之.安装时提示先卸载旧版本.控制面板和其他软件管理器都不能正常卸载,提示" The MSI '' failed",索性直接 ...
- Firefly框架参考
在游戏服务器端,往往需要处理大量的各种各样的任务,每一项任务所需的系统资源也可能不同.而这些复杂的任务只用一个单独的服务器进程是很难支撑和管理起来的.所以,游戏服务器端的开发者往往需要花费大量的时间精 ...
- php数组遍历 使用while循环
while() 通常和 list(),each()配合使用. $colors= array('red','blue','green','yellow'); while(list($key,$val)= ...