黑马程序员技术交流社区

标题: LinkedList练习小问题 [打印本页]

作者: 奋上    时间: 2014-8-5 21:33
标题: LinkedList练习小问题
本帖最后由 奋上 于 2014-8-5 21:35 编辑
  1. /*LinkedList小练习  自定义队列数据结构
  2. 堆栈:先进后出
  3. 队列:先进先出
  4. */



  5. import java.util.*;



  6. class DuiLie
  7. {
  8.         private LinkedList link;
  9.         DuiLie()
  10.         {
  11.                 link = new LinkedList();
  12.         }
  13.         public void myAdd(Object obj)
  14.         {               
  15.                 link.addFirst(obj);
  16.         }
  17.         public Object myGet()
  18.         {
  19.                 return link.removeLast();
  20.         }
  21.         public boolean isnull()
  22.         {
  23.                 return link.isEmpty();
  24.         }
  25. }




  26. class  LinkedListDemo
  27. {
  28.         public static void main(String[] args)
  29.         {

  30.                 DuiLie dl = new DuiLie();

  31.                 dl.myAdd("java01");
  32.                 dl.myAdd("java02");
  33.                 dl.myAdd("java03");
  34.                 dl.myAdd("java04");
  35.                 dl.myAdd("java05");


  36.                         System.out.println(dl.myGet());
  37.                
  38.         }
  39. }
复制代码



为什么打印结果是java05,在构造函数里面new LinkedList和在myAdd方法里面new LinkedList有什么区别?



作者: 陶圣虎    时间: 2014-8-5 21:44
存储时存在前面,取出时取出后面的。 所以先存的会先取出来。myAdd方法的linkList是构造函数传进去的,是唯一的一个,如果在方法里面new,则每次调用都会产生一个新的对象,就不是同一个了。
作者: 侯岩卿    时间: 2014-8-5 21:58
因为d1.myGet返回的是removeLast()方法的的值,removeLast()方法是移除此列表的最后一个元素("java05")并返回!所以打印结果是java05!

在构造函数里面new LinkedList()可以保证同一个DuiLie对象操作的是同一个LinkedList()!

如果在myAdd()中new LinkedList()的话,就不能保证同一个DuiLie对象操作的是同一个LinkedList(),因为每次调用一次myAdd()方法都会创建一个LinkedList!
作者: rolling-stone    时间: 2014-8-5 22:01
在最后的输出语句上面加一个while(!dl.isnull())循环,你这个没有判断集合里面是否还有对象.
作者: 阳光的嘉主角    时间: 2014-8-5 22:04
加油 多看看源码
作者: interface_sfly    时间: 2014-8-5 22:15
removeLast是去除最后一个元素。。先出java05有什么问题吗
作者: 唐覃利    时间: 2014-8-5 22:57
。。。。。。。。。。
作者: 奋上    时间: 2014-8-6 20:28
陶圣虎 发表于 2014-8-5 21:44
存储时存在前面,取出时取出后面的。 所以先存的会先取出来。myAdd方法的linkList是构造函数传进去的,是唯 ...

了解了,谢谢,你这么说我懂了
作者: 奋上    时间: 2014-8-6 20:29
侯岩卿 发表于 2014-8-5 21:58
因为d1.myGet返回的是removeLast()方法的的值,removeLast()方法是移除此列表的最后一个元素("java05")并返 ...

嗯,谢谢,懂了
作者: 南柯一梦    时间: 2014-8-6 20:56
在构造函数里new linkedList时时创建本类对象就创建linkedlist对象而在myadd方法时,调用add方法时才创建对象
作者: 奋上    时间: 2014-8-6 20:58
南柯一梦 发表于 2014-8-6 20:56
在构造函数里new linkedList时时创建本类对象就创建linkedlist对象而在myadd方法时,调用add方法时才创建对 ...

嗯,知道了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2