黑马程序员技术交流社区

标题: 集合框架堆栈的问题 [打印本页]

作者: 李阳阳    时间: 2013-3-27 10:56
标题: 集合框架堆栈的问题
本帖最后由 李阳阳 于 2013-3-27 11:52 编辑
  1. import java.util.*;
  2. class DuiLie
  3. {
  4.         private LinkedList link;
  5.         DuiLie()
  6.         {
  7.                 link = new LinkedList();
  8.         }
  9.         public void myAdd(Object obj)
  10.         {
  11.                 link.addFirst(obj);
  12.         }
  13.         public Object myGet()
  14.         {
  15.                 return link.removeFirst();      //1.为什么这个地方不能用getFirst()方法啊
  16.         }
  17.         public boolean isNull()
  18.         {
  19.                 return link.isEmpty();
  20.         }
  21. }
  22. class  LinkedListTest
  23. {
  24.         public static void main(String[] args)
  25.         {
  26.                 DuiLie dl = new DuiLie();
  27.                 dl.myAdd("java01");
  28.                 dl.myAdd("java02");
  29.                 dl.myAdd("java03");
  30.                 dl.myAdd("java04");

  31.                 sop(dl);         //2.为什么打印出来的是地址值呢
  32.                 while(!dl.isNull())
  33.                 {
  34.                         sop(dl.myGet());
  35.                 }
  36.                
  37.                
  38.         
  39.         }
  40.         public static void sop(Object obj)
  41.         {
  42.                 System.out.println(obj);
  43.         }
  44. }
复制代码

作者: 寇弘禄    时间: 2013-3-27 11:14
removeFirst();  是取出并移除容器中的数据,getFirst();是取出不移除数据。
此程序中如果取出不移除数据的话,主函数中的while就是死循环,因为容器里一直有数据。
为什么打印地址值,因为DuiLie类只是一个普通的类,并不是集合的子类,所以直接打印出来的只是他在内存中的引用地址。
作者: 程宁宁    时间: 2013-3-27 11:15
第一个问题:
     getFirst()方法是取到第一个元素,但是不会从list里移除,
那么每次执行都会取同一个值,那 sop(dl.myGet())的执行将一直执行下去.

第二个问题:
System.out.println(obj);默认等同于 System.out.println(obj.toString());
所以会是字符串的形式.

作者: fighting    时间: 2013-3-27 11:20
首先第一个问题:那个地方不是不能用getFirst()方法,而是要看你实现怎样的功能,
你这里貌似要实现一个队列的入队、出队、判空的操作,队列的操作规则是先进先出,
如果你在myGet方法中使用getFirst()方法,每次得到的数据后,该数据仍然会保留在链表中
与队列的规则不符。

顺便说一下,你的myAdd与myGet实现有点冲突了,逻辑不太对哈,该看看链表的知识了

第二个问题是打印出地址了,显然是因为你没有重写DuiLie这个类的toString方法导致的




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