检索数组列表中的最后一个对象? Java [重复]

Posted

技术标签:

【中文标题】检索数组列表中的最后一个对象? Java [重复]【英文标题】:Retrieving last object in an array list? Java [duplicate] 【发布时间】:2015-06-08 16:13:00 【问题描述】:

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

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

在这里,我试图检查袋子中的最后一个 Bean 是黑色还是白色,然后添加到存储当前袋子中每种颜色的 Beans 总数的计数器。但是,每次运行它时,我都会在索引 1 处得到一个 OutOfBounds 异常。我该如何解决这个问题? (PS:我们这周刚在 CS 课上学习了 ArrayLists,所以我仍然不是 100% 理解这个概念,虽然我想我已经开始掌握它了。)

编辑:这个包的大小变化很大,有时为 0。但是,BlueJ 说当大小为 1 时出现错误,我尝试访问的索引也是如此。

原来的问题解决了。后续问题:当我运行程序时,一切都会正常工作,但有时它也会给我一个超出范围的异常,以下 sn-p 也是如此,并且由于程序必须为我的任务执行 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 的异常。

【问题讨论】:

您能否提供完整的代码 sn-p 而不仅仅是条件代码? 提示:大小为 N 的数组的第一个索引是什么?最后一个索引是什么? 【参考方案1】:

试试这个:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

你需要调用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++;

【讨论】:

以上是关于检索数组列表中的最后一个对象? Java [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Oracle 存储过程中检索数组列表 - Java

在 ArrayList Java 的最后一个元素中查找对象 [重复]

根据JavaScript中的属性值从对象数组中选择[重复]

java中 List 与Set 有啥区别?

如何在java中的对象列表中查找重复项

如何遍历列表并检索最小值的索引但忽略输出列表中的重复项?