标题: 用LinkedList模拟一个堆栈的练习,谢谢! [打印本页] 作者: 刘宁 时间: 2012-3-20 18:56 标题: 用LinkedList模拟一个堆栈的练习,谢谢! 用LinkedList模拟一个堆栈或者队列数据结构。
堆栈:先进后出,如同一个杯子。
队列:先进先出 First in First out FIFO 如同一个水管
import java.util.*;
class MyList
{
private LinkedList link;
MyList()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.addLast(obj);
}
public Object myGet()
{
return link.removeLast();
}
public boolean isNull()
{
return link.isEmpty();
}
}
class LinkedListTest
{
public static void main(String[] args)
{
MyList ml = new MyList();
while(!ml.isNull())
{
System.out.println(ml.myGet());
}
有两个地方看不懂,
1:为什么要创建个构造函数?而不是直接LinkedList link = new LinkedList();
MyList()
{
link = new LinkedList();
}
2,System.out.println(ml);
毕老师没有打印,我想打印但是这样打印之后是MyList@12d96f2,就是地址值。为什么不打印一 个集合出来?作者: ♂诸侯♂ 时间: 2012-3-20 19:05
实例化的时候肯定要有构造函数。
构造函数得和类名相同。
LinkedList link = new LinkedList();的时候
调用
MyList()
{
link = new LinkedList();
}
第二个问题。不懂了。作者: 张锐 时间: 2012-3-20 19:22
1.linkedlist是类的私有成员,你可以把新建实例的功能封装成一个函数,但是通过构造函数创建新的实例不是用起来更很方便吗。
2.打印是默认调用类中的tostring方法,你这里的mylist没有重写tostring方法,虚拟机就按照object的tostring方法打印结果了。getClass().getName() + '@' + Integer.toHexString(hashCode())。如果你想按照自己的需求打印结果,就得自己重写tostring方法。 作者: 蒙武辉 时间: 2012-3-20 19:23
毕老师没有打印,我想打印但是这样打印之后是MyList@12d96f2,是引用不是集合。
1:为什么要创建个构造函数?而不是直接LinkedList link = new LinkedList();你也可以直接打印出来不用创建一个辅助类。 作者: 刘元明 时间: 2012-3-20 19:34
你创建的ml只是一个MyList对象,你打印ml肯定是它的地址值,
你想把它当集合用,必须借助你封装的功能,就像这句ml.myGet(); 作者: 贠(yun)靖 时间: 2012-3-20 20:37
有两个地方看不懂,
1:为什么要创建个构造函数?而不是直接LinkedList link = new LinkedList();
因为你直接在类里面LinkedList link = new LinkedList(); 初始化的话,你只要编译了,把类加载到内存里 就有一个link对象在内存了
而不管你创建对象与否 这个对象都会随着类加载到内存的 把初始化放到构造函数中,成员属性private LinkedList link;
有个隐士初始化 就是link=null 这是不占用内存资源的,等你创建对象的时候 构造函数自动执行 这时候才会初始化对象,给对象分配内存
MyList()
{
link = new LinkedList();
}
2,System.out.println(ml); 而你直接打印ml ml是你这个类的引用 是对象在内存中的首地址值
我想你应该是想打印集合中的元素吧? 你应该打印link 而不是ml link才是集合对象
你应该这样打印 添加一个getLiked()方法来调用 私有的成员引用变量 link 虽然你打印的是link引用 但是系统会自动调用Object 类中的toString方法
帮你自动转换成字符串的 这是System。out。println() 打印语句自动让系统执行的
import java.util.*;
class MyList
{
private LinkedList link;
MyList()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.addLast(obj);
}
public Object myGet()
{
return link.removeLast();
}
public boolean isNull()
{
return link.isEmpty();
}
public LinkedList getLinked()
{
return link;
}
}
class LinkedListTest
{
public static void main(String[] args)
{
MyList ml = new MyList();