Java ArrayList 替换特定索引处的元素

260

我需要帮助解决这个Java问题。我创建了一个灯泡的ArrayList,并尝试在特定索引处用另一个灯泡替换灯泡。那么按照以下标题,我该怎么做呢?

public void replaceBulb(int index, Bulbs theBulb) {

}

13
就我所知,我在查找“替换”、“放置”或“插入”时是在查看List接口。我没有考虑过寻找set。 - GuiSim
2
@GuiSim List接口并不是很长,你可以轻松地在5分钟内一次性阅读完整个接口。 - user719662
3
我使用了Eclipse的自动补全功能,没有浏览整个界面。 - GuiSim
6个回答

434

查看List接口中的set(int index, E element)方法。


3
你说得对。但是你可能需要编辑一下,因为你的回答让人误以为set()方法是一个静态方法,但事实并非如此,对吗? - Android Killer
9
当你在自己的列表上调用 myArrayList.set(int, E) 时,它与 ArrayList.set() 方法一样是静态的,但不同于后者。 - whitfin
这种方法的问题在于,如果arrayList没有被初始化,它会抛出arrayOutOfBoundException异常。我想在添加元素时将其放在正确的索引处,但不确定是否有办法实现。 - Bionix1441
@Bionix1441 即使列表已经被初始化,仍然有可能尝试为不存在的索引设置值。因此,您只需要确保您的索引是有效的。 - TotoroTotoro

155
你可以使用ArrayList的set方法替换特定位置的元素,如下所示:
list.set( your_index, your_item );

然而,在调用set()方法时,元素应该存在于您传递的索引中,否则它将抛出异常。

此外,您可以在这里查看Oracle文档。


1
@vaxquis 好的先生,请您编写Java 8并发布它。我们在这里使用它。 ;) 在SO中,答案应始终根据问题,因此请先阅读问题。如果返回先前的值有什么问题,如果您想要该值,则可以使用else,否则请离开它。它正在替换旧值,就是这样。 - Android Killer
1
@vaxquis,你之前有看过我的评论吗?我明确提到答案应该始终根据问题而定。提问的人已经说明他想要替换元素,这意味着他已经有了包含元素的ArrayList。现在清楚了吗,先生? - Android Killer
1
@vaxquis,你所考虑的事情,新手也会知道,所以这些问题没有任何意义。不过我已经编辑过了,希望你满意 :) - Android Killer
2
作为新手意味着某人不知道如何正确编写代码。提供无效的代码始终是错误的,没有任何借口,因为它通常会给初学者带来困惑。提供正确且自包含的代码示例是StackOverflow的目的所在。感谢您对答案的改进。 - user719662

31

使用set()方法:查看文档

arraylist.set(index,newvalue);

9

7
public void setItem(List<Item> dataEntity, Item item) {
    int itemIndex = dataEntity.indexOf(item);
    if (itemIndex != -1) {
        dataEntity.set(itemIndex, item);
    }
}

2
这只有在新项目等于旧项目的equals()方法时才有效,对吧? - spikemanuk
@spikemanuk,这取决于“Item”中“equals()”方法的实现。如果相等性仅取决于“Item”的“id”,则可以使用此代码将“Item:{id = 1,name = London}”替换为“Item:{id = 1,name = Paris}”。 - Aniruddha Jagtap

1

让我们将数组列表称为 ArrayList,新值称为 value,您需要做的就是将参数传递给 .set 方法。 ArrayList.set(index,value)

例如 -

ArrayList.set(10,"new value or object")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接