`

一种对Java对象通用的栈实现

阅读更多


由于代码比较清晰,逻辑简单,所以没有多加说明。

1. 栈元素定义:

/**
* create on 2010-05-19 TODO: 栈元素
*
* @author 毛正吉
* @version 1.0
*
*/
class Node {
protected Object data;
protected Node next;

protected Node() {
data = null;
next = null;
}

protected Node(Object _data) {
data = _data;
next = null;
}
}

2. 栈容器定义:
/**
* create on 2010-05-19 TODO: 栈容器
*
* @author 毛正吉
* @version 1.0
*
*/
public class Stack {
private Node top;

public Stack() {
top = null;
}

/**
* 入栈
*
* @param obj
*/
public void push(Object obj) {
Node node = new Node(obj);
node.next = top;
top = node;
}

/**
* 出栈
*
* @return
* @throws StackException
*/
public Object pop() throws StackException {
if (top == null)
throw new StackException("popping from an empty stack");
else {
Object obj = top.data;
top = top.next;
return obj;
}
}

/**
* 返回栈顶元素
*
* @return
* @throws StackException
*/
public Object peek() throws StackException {
if (top == null)
throw new StackException("peeking into empty stack");
else
return top.data;
}

public boolean isEmpty() {
return (top == null);
}
}

3.栈异常定义:
/**
* create on 2010-05-19 TODO:栈异常定义
*
* @author 毛正吉
* @version 1.0
*
*/
public class StackException extends Exception {
public StackException() {
super("Stack Exception");
}

public StackException(String msg) {
super(msg);
}
}

4. Java对象:
public class Student {
private String name;
private Integer age;

public Student(String _name, Integer _age) {
name = _name;
age = _age;
}

public String toString() {
return "name=" + name + ", " + "age=" + age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}

5.栈应用测试:
/**
* create on 2010-05-19 TODO: 栈应用测试
*
* @author 毛正吉
* @version 1.0
*
*/
public class StackApp {

/**
* @param args
* @throws StackException
*/
public static void main(String[] args) throws StackException {
Student s1 = new Student("Alice", 20);
Student s2 = new Student("Bob", 22);
Student s3 = new Student("Jack", 20);
Student s4 = new Student("John", 23);
Student s5 = new Student("Robit", 25);

Stack s = new Stack();
s.push(s1);
s.push(s2);
s.push(s3);
s.push(s4);
s.push(s5);

//s.pop();

while(!s.isEmpty()){
Student st = (Student) s.pop();
System.out.println(st);
}
}

}

6.输出结果:
name=Robit, age=25
name=John, age=23
name=Jack, age=20
name=Bob, age=22
name=Alice, age=20

分享到:
评论
10 楼 maozj 2010-05-24  
adventurous 写道
我现在在论坛发不了贴了,你们的论坛能正常显示吗,我的好像是系统做维护一样,很多功能没了。

他有一些规则,如果违反了,要被惩罚。。你还是看看论坛发帖规则哈
9 楼 adventurous 2010-05-21  
我现在在论坛发不了贴了,你们的论坛能正常显示吗,我的好像是系统做维护一样,很多功能没了。
8 楼 maozj 2010-05-21  
wangzaixiang 写道
拿这个来练习数据结构吗?

客观的说,这个Stack,拿来实用是不合适的:
1、内存的使用效率并不高,不如采用一个数组做底层的效率高。
2、实际使用的话,要考虑是否是线程安全的,作者方面的处理。

maozj 写道
pujia12345 写道
maozj 写道
pujia12345 写道
真的是新手帖!

在javaeye论坛上发帖属新手~~


主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦

那向您请教了...


恩~~ 您的说法果然不错 我很能接受 您是高人。。。这才是分享和交流。。。非常感谢你的回复哈!
7 楼 wangzaixiang 2010-05-21  
拿这个来练习数据结构吗?

客观的说,这个Stack,拿来实用是不合适的:
1、内存的使用效率并不高,不如采用一个数组做底层的效率高。
2、实际使用的话,要考虑是否是线程安全的,作者方面的处理。

maozj 写道
pujia12345 写道
maozj 写道
pujia12345 写道
真的是新手帖!

在javaeye论坛上发帖属新手~~


主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦

那向您请教了...

6 楼 maozj 2010-05-21  
pujia12345 写道
maozj 写道
pujia12345 写道
真的是新手帖!

在javaeye论坛上发帖属新手~~


主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦

那向您请教了...
5 楼 pujia12345 2010-05-21  
maozj 写道
pujia12345 写道
真的是新手帖!

在javaeye论坛上发帖属新手~~


主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦
4 楼 maozj 2010-05-21  
pujia12345 写道
真的是新手帖!

在javaeye论坛上发帖属新手~~
3 楼 pujia12345 2010-05-21  
真的是新手帖!
2 楼 maozj 2010-05-20  
hatedance 写道
lz是用链表结构实现了栈吗?
lz似乎是从c阵营转过来的,搞java的人很少去搞这些基础的东西,jdk已经提供了不错的stack实现。

我是一开始就搞java的,jdk提供的栈实现是相当不错的,我只是突然有想写种栈实现的想法,所以就写了一个,兴趣导向,意在分享哈...谢谢
1 楼 hatedance 2010-05-20  
lz是用链表结构实现了栈吗?
lz似乎是从c阵营转过来的,搞java的人很少去搞这些基础的东西,jdk已经提供了不错的stack实现。

相关推荐

    Java通用范例开发金典源代码

    - 类与对象:Java是一种面向对象的语言,源代码中会包含如何定义类、创建对象以及进行封装、继承和多态的实例。 - 控制结构:包括条件语句(if-else,switch)和循环语句(for,while,do-while),这些都是编写...

    java面向对象小程序

    Java是一种广泛使用的编程语言,以其“一次编写,到处运行”的特性而闻名。在这个“java面向对象小程序”中,我们可以深入探讨Java语言的核心概念——面向对象编程(Object-Oriented Programming,简称OOP)。面向...

    Java对象交换方法剖析.pdf

    Java对象交换方法剖析这篇论文深入探讨了在Java中如何交换两个对象的问题,并提供了相应的技术实现和分析。首先,文章介绍Java内存分配机制,指出对象实例通常存放在堆内存中,而静态和非静态方法等存放在栈内存中。...

    JAVA中的面向对象与内存解析

    在Java编程语言中,面向对象(Object-Oriented Programming,OOP)是核心特性之一,它使得代码结构清晰,易于维护。面向对象编程基于三个主要概念:封装、继承和多态。下面我们将深入探讨这些概念及其在Java中的实现...

    Java数据结构与面向对象编程基础

    在Java中,接口提供了一种方式来定义一个类型必须实现的方法,是多继承的替代方案。抽象类可以包含未实现的方法,用于定义一个类族的通用行为。同时,集合框架(如ArrayList、LinkedList、Set和Map等)是Java中实现...

    sip协议的java实现

    Java作为一种通用编程语言,提供了丰富的库来支持SIP协议的实现,使得开发者可以构建基于SIP的应用程序。 在Java中实现SIP协议,我们可以借助JSIP(Java SIP API)库,这是一个开放源代码的项目,为Java平台提供SIP...

    一个java处理JSON格式数据的通用类.pdf

    本文档将详细介绍一个用于Java中处理JSON数据的通用类——`JsonUtil`,该类封装了一系列方法用于实现JSON与Java对象之间的转换。 #### 类结构及包引入 `JsonUtil`位于`com.linghui.common.util`包下。为了实现JSON...

    java通用文件上传功能技术实现

    ### Java通用文件上传功能技术实现 #### 一、文件上传概述与原理 在现代软件开发过程中,文件上传是一项非常常见的需求。特别是在Web应用领域,无论是简单的图像上传还是复杂的文档管理,都需要开发者掌握文件上传...

    用栈实现返回功能

    栈是一种后进先出(LIFO)的数据结构,非常适合用来模拟历史记录的操作。每次用户进入新的页面时,都可以将该页面的信息压入栈中;当用户选择返回时,则可以从栈顶弹出最新的页面信息,并跳转到对应的页面。 #### ...

    讲递java实现 代码

    在IT行业中,编程语言是构建软件的基础,而Java是一种广泛使用的高级编程语言,以其平台无关性、面向对象的特性以及丰富的类库而受到开发者们的喜爱。在这个“讲递java实现 代码”的主题中,我们将深入探讨Java编程...

    java面向对象选择题题库

    ### Java面向对象选择题知识点详解 #### 一、Java源文件命名规则 - **选项解析**: - **错误选项**:源文件名没有限制、必须使用`.class`扩展名。 - **正确选项**:Java 源文件的名称必须与其中定义的公共类名...

    java使用泛型实现栈结构示例分享

    在Java编程中,泛型是一种强大的工具,它允许开发者在编写代码时指定容器类(如列表、队列或栈)所容纳的对象类型。这有助于确保类型安全,防止在运行时出现ClassCastException。Java SE 5.0引入了泛型,大大提高了...

    1、Java面向对象编程 第2版.zip

    - JVM是Java程序运行的平台,理解其内存模型(堆、栈、方法区等)和垃圾回收机制对优化性能有帮助。 通过《Java面向对象编程 第2版》的学习,读者将能够熟练掌握Java OOP的核心概念,从而编写出高效、可维护的Java...

    综述一种嵌入式Java虚拟机的性能优化技术设计与实现.pdf

    JVM作为一种栈式虚拟机,通过堆栈来执行字节码运算,简化了设计并提高了执行效率。然而,实际处理过程中涉及到异常处理、对象实例化、类型检查和虚方法调用等复杂操作,这些都需要进行优化以提升性能。 性能优化...

    java面向对象精华总结.doc

    Java面向对象编程(Object-Oriented Programming,OOP)是现代软件开发中广泛采用的一种编程范式。它与面向过程编程不同,后者更侧重于步骤和逻辑,而面向对象则关注于数据和操作数据的实体——即对象。 1. **面向...

    Java通用代码生成器光2.3.0文明版本Beta8版

    Java通用代码生成器光2.3.0文明版本Beta8版。请部署在Tomcat9的webapps目录下。 Beta8版修复了不带登录模块的模板的代码...这种代码生成器是一种动词算子式代码生成器,通过域对象和各种动词算子的组合生成各种功能。

    list转树状结构通用工具类

    "list转树状结构"就是其中的一种常见需求,特别是在数据可视化、数据库查询优化或者构建层次化菜单等场景下。本篇将深入探讨如何实现一个非递归的、支持多个顶级节点的通用工具类来完成这一任务。 首先,我们需要...

    java代码实现的微云盘系统(仿百度云)

    Java是一种广泛使用的面向对象的编程语言,特别适合于开发企业级应用。JSP(JavaServer Pages)是Java在Web开发中的一个重要组成部分,它允许开发者将静态HTML与动态Java代码结合起来,生成动态网页内容。Servlet是...

    Java基础尚硅谷宋红康学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性,成为跨平台应用开发的首选语言。Java的基础部分主要包括以下几个方面:...

Global site tag (gtag.js) - Google Analytics