【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 学习资料 某天我 ...
随机推荐
- 八,WPF 命令
WPF命令模型 ICommand接口 WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理,它包含了两个方法和一个事件: public in ...
- 一步步学习ASP.NET MVC3 (8)——EmptyResult,ContentResult,RedirectResult
请注明转载地址:http://www.cnblogs.com/arhat 上一章,我们阐述了Controller,Action和ActionResult所代表的含义及使用,本章继续研究ActionRe ...
- Git权威指南 读笔(4)
第12章 改变历史: $ git commit --amend -m "Remove hello.h, which is useless." 修改提交说明 $ git log -- ...
- sencha touch mvc
controller: Ext.define('MyApp2.controller.MyController1', { extend: 'Ext.app.Controller', config: { ...
- cnn常用参数记录
1. epoch 在代码中经常见到n_epochs这个参数,该参数到底是什么意思呢?答案如下: 在一个epoch中,所有训练集数据使用一次 one epoch = one forward pass a ...
- 【深度学习系列3】 Mariana CNN并行框架与图像识别
[深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...
- shell中的内建命令, 函数和外部命令
转自shell中的内建命令, 函数和外部命令 Shell识别三种基本命令:内建命令.Shell函数以及外部命令: (1)内建命令就是由Shell本身所执行的命令. 有些命令是由于其必要性才内建的 ...
- 查看jdk的位数
public class Test { public static void main(String[] args) { System.out.println("bit of JVM is ...
- KMP的next[]数组
KMP是众多字符串问题的基础 理解next数组尤为重要 next又称前缀数组 是 它所处位置的前一个位置的元素 与 该链 链首开始 几个元素相匹配(即相同) 举个实例来说明: next对应的是该位置的 ...
- [状压dp]HDU5045 Contest
题意: n和人做m道题, 每俩人做的题数不能相差一题以上.(也就是每n道题分别由n个人完成) 给n个人分别做m道题的概率, 求完成m题的最大期望 $1\le N \le 10$ 注意!!! fil ...