Java ArrayList添加对象 - >扔掉旧的

时间:2015-06-02 16:20:18

标签: java arraylist rotation

我有一个名为“Transaction.java”的类,我有一个最新的五个事务的ArrayList。因此,此ArrayList的大小应始终在0到5之间。

当有新事务时,我必须旋转此ArrayList中的所有条目。条目4变为条目3,条目3变为条目2,条目2变为条目1,条目1变为条目0,条目0变为新事务。 最旧的(具有索引4的对象)将被覆盖。

尝试对此进行编码时,我遇到了ArrayIndexOutOfBoundsExceptions或NPE的麻烦,因为我执行transactions.set(4,transactions.get(3));,即使在transaction.get(3)中没有任何内容,也没有事务.get(4)也是空的!

这是我的代码的一小部分:

for (int i =  4; i >= 0; i--) {
    try {
        if (i == 0) {
            latestTransactions.set(i, newTransaction);
        }
        else {
            latestTransactions.set(i, latestTransactions.get(i - 1));
        }
    } catch (Exception e) { // NPE / AIOOBE
        e.printStackTrace();
    }

}

异常被抛出5次(这就是for循环的大小)并且没有在ArrayList中设置任何东西。

请尽量保持冷静和理解,我是新的怜悯^^

2 个答案:

答案 0 :(得分:1)

你可以在没有循环的情况下完成。

假设ArrayList已包含5个元素:

oldestElement = latestTransactions.remove(0); // this will remove the element at the 0 index
                                              // and decrement the index of all the others

然后

latestTransactions.add(newElement); // will add the new element at the end (index 4)

如果ArrayList的元素少于5个,您可以写:

if (latestTransactions.size () >= 5) {
    oldestElement = latestTransactions.remove(0);
}
latestTransactions.add(newElement);

如果ArrayList已包含5个元素,则只删除最旧的元素,并在末尾添加新元素。

答案 1 :(得分:-1)

Queue queue = new LinkedList();
queue.push(newTransaction);
setLatestTransaction(queue.pop());