黑马程序员技术交流社区

标题: ArrayList的FIFO [打印本页]

作者: 黑马连家华    时间: 2012-10-17 21:45
标题: ArrayList的FIFO
本帖最后由 黑马连家华 于 2012-10-17 22:21 编辑
  1. public static void task_2()
  2.                 {
  3.                         //按正常顺序添加(即添加元素索引依次为0,1,2...)
  4.                         LinkedList<Integer> ll = new LinkedList<Integer>();
  5.                         //FIFO
  6.                         for(int x= 0;x < 10;x++)
  7.                         {
  8.                                 ll.add(x);
  9.                         }
  10.                         FIFO(ll);
  11.                         LinkedList<Integer> ll2 = new LinkedList<Integer>();
  12.                         //FILO
  13.                         for(int x= 0;x < 10;x++)
  14.                         {
  15.                                 ll2.add(x);
  16.                         }
  17.                         FILO(ll2);
  18.                 }
  19.                 //LinkedList的FIFO(队列)
  20.                 public static void FIFO(LinkedList<Integer> ll)
  21.                 {
  22.                         System.out.println("队列模拟:");
  23.                         for(int x = 0;x < ll.size();x++)
  24.                         {
  25.                                 System.out.print(ll.removeFirst()+" ");
  26.                         }
  27.                         System.out.println();
  28.                 }
复制代码
}
这是一段代码,为什么运行时只打印5个元素?
作者: 曾浩    时间: 2012-10-17 22:11
原因在于你for 循环的条件问题   因为removeFirst()执行后其元素也就被删除了 所以集合的size也就变了
size没循环一次就减一了   而x每执行一次循环就增一  这样刚好执行五次是他们的值相等了 for循环中的条件也就不成立了  所以只循环了五次
作者: 杨卫腾    时间: 2012-10-17 22:14
  1.         public static void task_2()
  2.         {
  3.                 //按正常顺序添加(即添加元素索引依次为0,1,2...)
  4.                 LinkedList<Integer> ll = new LinkedList<Integer>();
  5.                 //FIFO
  6.                 for(int x= 0;x < 10;x++)
  7.                 {
  8.                         ll.addFirst(x);
  9.                 }
  10.                 FIFO(ll);
  11.                 LinkedList<Integer> ll2 = new LinkedList<Integer>();
  12.                 //FILO
  13.                 for(int x= 0;x < 10;x++)
  14.                 {
  15.                         ll2.addFirst(x);
  16.                 }
  17.                 FIFO(ll2);
  18.         }
  19.         //LinkedList的FIFO(队列)
  20.         public static void FIFO(LinkedList<Integer> ll)
  21.         {
  22.                 System.out.println("队列模拟:");
  23.                 while(!ll.isEmpty())
  24.                 {                                
  25.                         System.out.print(ll.removeLast()+" ");
  26.                 }
  27.               //  ll.clear();
  28.                 System.out.println();
  29.         }
复制代码
哥们:我想原因应该在这里吧!

System.out.print(ll.removeFirst()+" ");

removeFirst()方法删除这个元素的时候就返回这个元素,元素的个数就会少一个了,
所以你肯定是打印的前五个元素,是吧!

这样你使用那个 isEmpty()  方法,这个能行。


作者: 黑马连家华    时间: 2012-10-17 22:21
楼上两哥们儿都点醒我了,谢谢你们了




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