如何在java ArrayList中向后移动数据

时间:2015-06-25 15:48:52

标签: java arraylist

我正在尝试这样做,所以我可以将数据写入ArrayList以跟踪随机整数,然后我将有一个前一个按钮,它将返回到最后的结果(这只是测试该代码,这不是完整的代码对于项目)我在尝试获取int arraySize并将其减去1并重新打印数据时收到错误。知道为什么会发生这种情况或者如何完成任务的另一种方式。

int lenth = 10;
ArrayList<Integer> list = new ArrayList<Integer>();
int arraySize = list.size();
Random random = new Random();
int newRandom = random.nextInt(lenth);
list.add(newRandom);
newRandom = random.nextInt(lenth);
list.add(newRandom);
System.out.println(list.get(arraySize));
arraySize--;
System.out.println(list.get(arraySize));

这也是我得到的错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at test.C_MainActivity.main(C_MainActivity.java:22)

3 个答案:

答案 0 :(得分:3)

当您将一个primitive(例如int)分配给另一个时,会将该值复制到新变量。对于对象,这有点不同,因为这些变量将指向同一个对象。

int arraySize = list.size();

因此,上述行只会将arraySize设置为列表的当前大小,arraySize不会随着列表大小的变化而更改。由于您在列表为空时执行此操作,因此它将保持0并且您将尝试获取索引00-1 = -1处的元素,这是您的例外情况进来了。

您应该在插入所有元素之后设置它。

请注意,Java中的索引从0开始,因此最后一个元素已经位于list.size() - 1,而不是list.size()

答案 1 :(得分:0)

在将任何内容添加到列表之前,您正在设置arraySize。 arraySize的值始终为0,因为您只在开头设置它。当你调用arraySize--时,arraySize现在是-1,当你调用list.get(arraySize)时,你会得到索引超出范围的异常,因为你要求索引-1。

答案 2 :(得分:0)

您的目标似乎是将一个集合中的值排入队列,然后将它们出列。例如,LinkedList更适合使用push()pop()方法。

无论如何,你不应该通过外部变量跟踪ArrayList的大小。已在ArrayList内为您提供此类数据,因此您只需查询列表即可了解其大小。