【问题标题】:Unable add item in a linkedList based Queue in Java无法在 Java 中基于linkedList 的队列中添加项目
【发布时间】:2016-01-23 14:40:37
【问题描述】:

我正在使用 Queue 和 LinkedList。因此,我按照一些教程创建了一个基于 LinkedList 的队列,并运行一个循环从 0 到 9 遍历以添加到这些数字。然而,完成后我发现我在文件的开头有 10 个零,而不仅仅是 1。我从头部轮询了 1 个零并再次打印,但现在,我有 10 个或更多的 1,而不是少一个零( 0)。 这是我第一次使用队列,所以可能会有一些错误! 我的代码如下:

    import java.util.LinkedList;
    import java.util.Queue;

    Queue<Integer> queue = new LinkedList<Integer>();

    for(int i = 0; i < 10; i++)
    {
        System.out.println(i);
        queue.add(i);
    }

    for(int i = 0; i < 10; i++)
    {
        System.out.print(queue.peek() + " >> ");
    }
    System.out.println();

    System.out.println(queue.poll());
    for(int i = 0; i < 10; i++)
    {
        System.out.print(queue.peek() + " $$ ");
    }
    System.out.println();


}}

这是我得到的输出集

0 >> 0 >> 0 >> 0 >> 0 >> 0 >> 0 >> 0 >> 0 >> 0 >> 
0
1 $$ 1 $$ 1 $$ 1 $$ 1 $$ 1 $$ 1 $$ 1 $$ 1 $$ 1 $$ 

据我所知,我应该在第一行使用 0 >> 1 >> 2 >> 3.... 而不是只有零 (0)。并且后续的最后一行也不应该只有 1。 我被困在这里

【问题讨论】:

    标签: java data-structures queue


    【解决方案1】:

    您的代码实际上很好。阅读Java documentation on Queues,你会注意到peek()

    检索但不删除此队列的头部,或返回 如果此队列为空,则为 null。

    多次调用 peek 不会更改您的队列。但是,如果要删除元素,可以使用poll(),它将

    获取并移除此队列的头部,如果此则返回 null 队列是空的。

    【讨论】:

    • 我已经用我的输出集更新了这个问题。看,而不是 0, 1 , 2, 3... 我只有 0 ,当我轮询出来时,我有 1, 1, 1, 1....
    • 是的,因为您轮询一次并查看一百次,这导致队列中的一个变化和一百个呼叫没有任何变化。如果您想查看队列的所有项目,则每次都必须使用 poll(这也会清空队列,但这就是队列的工作方式)。
    • 哦!谢啦!它真的有效:).. 我不知道。我现在明白了,peek 只是给了我队列的第一项......对 :) 再次感谢队友
    【解决方案2】:

    获得零的原因是您的队列指针指向头部。您需要一个迭代器来遍历队列中的所有项目。

    Iterator<Integer> iterator = queue.iterator();
    while (iterator.hasNext()){
      System.out.println((Integer)iterator.next);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 2017-08-14
      • 2019-03-25
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多