论坛首页 Java企业应用论坛

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

浏览 4340 次
精华帖 (5) :: 良好帖 (0) :: 新手帖 (18) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-20  


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

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

   发表时间:2010-05-20  
lz是用链表结构实现了栈吗?
lz似乎是从c阵营转过来的,搞java的人很少去搞这些基础的东西,jdk已经提供了不错的stack实现。
0 请登录后投票
   发表时间:2010-05-20  
hatedance 写道
lz是用链表结构实现了栈吗?
lz似乎是从c阵营转过来的,搞java的人很少去搞这些基础的东西,jdk已经提供了不错的stack实现。

我是一开始就搞java的,jdk提供的栈实现是相当不错的,我只是突然有想写种栈实现的想法,所以就写了一个,兴趣导向,意在分享哈...谢谢
0 请登录后投票
   发表时间:2010-05-21  
真的是新手帖!
0 请登录后投票
   发表时间:2010-05-21   最后修改:2010-05-21
pujia12345 写道
真的是新手帖!

在javaeye论坛上发帖属新手~~
0 请登录后投票
   发表时间:2010-05-21  
maozj 写道
pujia12345 写道
真的是新手帖!

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


主要是你的帖子水平不高,大家都投你新手,小心罚你回答问题哦
0 请登录后投票
   发表时间:2010-05-21  
pujia12345 写道
maozj 写道
pujia12345 写道
真的是新手帖!

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


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

那向您请教了...
0 请登录后投票
   发表时间:2010-05-21  
拿这个来练习数据结构吗?

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

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

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


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

那向您请教了...

0 请登录后投票
   发表时间:2010-05-21  
wangzaixiang 写道
拿这个来练习数据结构吗?

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

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

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


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

那向您请教了...


恩~~ 您的说法果然不错 我很能接受 您是高人。。。这才是分享和交流。。。非常感谢你的回复哈!
0 请登录后投票
   发表时间:2010-05-21  
我现在在论坛发不了贴了,你们的论坛能正常显示吗,我的好像是系统做维护一样,很多功能没了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics