在java队列中添加新元素的位置

时间:2016-11-06 13:00:49

标签: java list queue

我正在使用CircularFifoQueue来创建队列。一切都很好,但我有点困惑。新值是否在列表末尾添加?这是for循环的结果

public static CircularFifoQueue<Client> usersDelay = new CircularFifoQueue<Client>(4);

System.out.println(newValue);
   list.add(newValue);
    for(int i=0; i<list.size(); i++){
    System.out.println(i+ ": "+list.get(i));
    }

New value : 345
0: 345
--------------------------
New value : 369
0: 345
1: 369
--------------------------
New value : 444
0: 345
1: 369
2: 444
--------------------------
New value : 432
0: 345
1: 369
2: 444
3: 432
--------------------------
New value : 633
0: 369
1: 444
2: 432
3: 633
--------------------------
New value : 346
0: 444
1: 432
2: 633
3: 346
--------------------------
New value : 299
0: 432
1: 633
2: 346
3: 299
--------------------------
New value : 423
0: 633
1: 346
2: 299
3: 423
--------------------------
New value : 538
0: 346
1: 299
2: 423
3: 538
--------------------------

如果我想获得最近添加的10个元素,我应该将列表从结尾循环到开头吗?

1 个答案:

答案 0 :(得分:0)

您正在使用大小为4的循环FIFO队列。 想象一下。

enter image description here

因此,当您开始向队列添加元素时。这个过程就是这样的。

  1. 第一个元素,345转到第0个索引。
  2. 第二个元素,369转到第一个索引。
  3. 第三个元素,444转到第二个索引。
  4. 第四个元素,432进入第四个指标。 此时,由于您的队列大小仅为4,因此您的队列已满,您的写入位置就在队列的HEAD之前。
  5. 当你添加633时,它自然会替换第0个索引(元素345),因为它是下一个。这就是为什么现在你的队列头改为369,最后一个元素现在是633。
  6. 当你添加346时,它将删除369并用新元素替换它,但你的新头现在是444。
  7. 同时阅读文档。

    value : 1

    如果你想迭代10个最近排序的元素,那么首先将队列的大小增加到10以上。然后从末尾迭代列表。

    如果要求获得最近添加的元素(LIFO)更自然,你也可以使用堆栈。