检索arraylist中的最后一个对象? Java的

时间:2015-04-03 14:48:16

标签: java arraylist

我有一个ArrayList,包,它存储Bean类型的对象,一个包含Bean颜色的类,存储在布尔值中。如果我想检索包中的最后一个Bean以检查它是什么颜色,我该怎么做?

if (((Bean)bag.get(bag.size())).getColor() == true)
   blackCounter++;
else
   whiteCounter++;

在这里,我试图检查包中的最后一个Bean是黑色还是白色,然后添加到计数器中,该计数器存储当前包中每种颜色的豆的总数。但是,每次运行它时,索引1都会出现OutOfBounds异常。我怎么能解决这个问题? (PS:本周我们刚刚在我的CS课上学习了ArrayLists,所以我仍然不是100%的概念,尽管我认为我已经开始掌握它了。)

编辑:这个包的大小发生了巨大的变化,有时是0.然而,BlueJ说我在大小为1时得到错误,就像我想要访问的索引一样。

原始问题解决了。后续问题:当我运行程序时,一切都会正常工作,但它有时也会给我一个超出范围的异常以及下面的代码片段,并且因为程序必须为我的任务执行50次不同的时间,这是有问题的

while (bag.size() > 1)
{
    int grab1 = rn.nextInt(bag.size());
    int grab2 = rn.nextInt(bag.size());

    boolean place1 = bag.get(grab1).getColor();
    boolean place2 = bag.get(grab2).getColor();

    if (place1 && place2)
    {
        bag.remove(grab2);
    }

    if (place1 && !place2)
    {
        bag.remove(grab1);
    }

    if (!place1 && place2)
    {
        bag.remove(grab2);
    }

    if(!place1 && !place2)
    {
        bag.remove(grab1);
        bag.remove(grab2); //This line will give me an Out of Bounds Exception when the size and the index are the same
        bag.add(new Bean());
    }
}

我也尝试在这里添加-1,但是它偶尔会让我超出索引-1的范围异常。

5 个答案:

答案 0 :(得分:3)

请记住,Java中的容器是从0而不是从1开始索引。这意味着如果ArrayList中有1项,则唯一有效的索引为0.要获取{{1}中的最后一个元素},使用List

所以你的代码会变成

bag.get(bag.size() - 1)

答案 1 :(得分:1)

试试这个:

public Bean getLastElement(List<Bean> myList) {
    return myList.get(myList.size() - 1);
}

答案 2 :(得分:1)

索引计数从0开始,所以如果array.size()返回5,则4是最后一项。

((Bean)bag.get(bag.size()-1))

答案 3 :(得分:1)

集合具有从0开始的索引,因此最后一个元素是size - 1。你需要为你的收藏是空的时候添加一个警卫。

答案 4 :(得分:1)

您需要调用getSize() - 1,因为List是0索引的。

例如,5个List中的第一个索引是0,最后一个索引是4

通过调用isEmpty(),您还应该在尝试之前检查列表是否为空。

示例

// assuming getColor weirdly returns boolean
if (bag != null && !bag.isEmpty() && ((Bean)bag.get(bag.size() - 1)).getColor()) {
   blackCounter++;
}
else {
   whiteCounter++;
}