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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李阳阳 中级黑马   /  2013-3-27 10:56  /  1259 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李阳阳 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

3 个回复

倒序浏览
removeFirst();  是取出并移除容器中的数据,getFirst();是取出不移除数据。
此程序中如果取出不移除数据的话,主函数中的while就是死循环,因为容器里一直有数据。
为什么打印地址值,因为DuiLie类只是一个普通的类,并不是集合的子类,所以直接打印出来的只是他在内存中的引用地址。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
第一个问题:
     getFirst()方法是取到第一个元素,但是不会从list里移除,
那么每次执行都会取同一个值,那 sop(dl.myGet())的执行将一直执行下去.

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

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

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

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

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

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马