A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘宁 中级黑马   /  2012-3-20 18:56  /  2876 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用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();

                ml.myAdd("java01");
                ml.myAdd("java02");
                ml.myAdd("java03");
                ml.myAdd("java04");
               
                System.out.println(ml);

                while(!ml.isNull())
                {
                        System.out.println(ml.myGet());
                }
有两个地方看不懂,
        1:为什么要创建个构造函数?而不是直接LinkedList link = new LinkedList();
        MyList()
        {
                link = new LinkedList();
        }
        2,System.out.println(ml);
        毕老师没有打印,我想打印但是这样打印之后是MyList@12d96f2,就是地址值。为什么不打印一        个集合出来?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

6 个回复

倒序浏览
实例化的时候肯定要有构造函数。
构造函数得和类名相同。
LinkedList link = new LinkedList();的时候
调用
MyList()
        {
                link = new LinkedList();
        }


第二个问题。不懂了。
回复 使用道具 举报
1.linkedlist是类的私有成员,你可以把新建实例的功能封装成一个函数,但是通过构造函数创建新的实例不是用起来更很方便吗。
2.打印是默认调用类中的tostring方法,你这里的mylist没有重写tostring方法,虚拟机就按照object的tostring方法打印结果了。getClass().getName() + '@' + Integer.toHexString(hashCode())。如果你想按照自己的需求打印结果,就得自己重写tostring方法。
回复 使用道具 举报
毕老师没有打印,我想打印但是这样打印之后是MyList@12d96f2,是引用不是集合。
1:为什么要创建个构造函数?而不是直接LinkedList link = new LinkedList();你也可以直接打印出来不用创建一个辅助类。
回复 使用道具 举报
你创建的ml只是一个MyList对象,你打印ml肯定是它的地址值,
你想把它当集合用,必须借助你封装的功能,就像这句ml.myGet();
回复 使用道具 举报
有两个地方看不懂,
        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();

                ml.myAdd("java01");
                ml.myAdd("java02");
                ml.myAdd("java03");
                ml.myAdd("java04");
               
                System.out.println(ml.getLinked());

                while(!ml.isNull())
                {
                        System.out.println(ml.myGet());
                }
                }
}
            
        毕老师没有打印,我想打印但是这样打印之后是MyList@12d96f2,就是地址值。为什么不打印一        个集合出来?
回复 使用道具 举报
周建 黑马帝 2012-3-20 22:26:12
7#
既然是模拟当然要把通过封装别人的东西实现自己的代码;LinkedList link = new LinkedList();这样就不是模拟了;集合可以用System.out.println(t);把元素都打印出来,而在你的程序中MyList并不是一个集合,也不是继承,所以不具备这种功能,System.out.println(ml);此处默认调用toString();你可以复写该方法实现与集合一样的功能;在MyList类中加上一下代码就好了:
public String toString(){
                return   link.toString();
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马