替换ArrayList中的对象

use*_*906 7 java arraylist

我需要知道如何替换一个对象ArrayList<Animal>.

我有一个名为的数组列表ArrayList<Animal>.此列表仅列出了初始的5只动物.

Animal animal = new Animal();
animal.setName("Lion");
animal.setId(1);

ArrayList<Animal> a = new ArrayList<Animal>();

a.put(animal); // likewise i will be adding 5-6 animals here.
Run Code Online (Sandbox Code Playgroud)

稍后,我将从此数组列表中获取一个对象并进行修改.

Animal modifiedAnimal = new Animal();
 animal.setName("Brown Lion");
    animal.setId(1);
Run Code Online (Sandbox Code Playgroud)

现在我需要将此Animal对象添加到ArrayList<Animal> a 数组列表中.我需要它来替换Animal我们命名的前一个对象Lion.我怎样才能做到这一点 ?

注意:我不知道添加此对象的索引.

T.J*_*der 7

如果你真的想取代Animal一个全新的列表Animal,使用List#set.要使用List#set,您需要知道Animal要替换的索引.你可以找到它List#indexOf.

如果您只想修改集合中已有的动物,则不必对列表执行任何操作,因为列表中存储的是对象的引用,而不是对象的副本.


bel*_*lum 6

您必须首先从列表中获取其引用并简单地修改它.像这样:

Integer yourId = 42;

for (Animal a : animalList){
     if (a.getId().equals(yourId)){
          a.setName("Brown Lion");
          //...
          break;
     }
}
Run Code Online (Sandbox Code Playgroud)


dur*_*597 2

查看bellum 的帖子,了解如何使用ArrayList. 但是,您可能会更好HashMap<String, Animal>

HashMap<String, Animal> animals = new HashMap<String, Animal>();
// ...
Animal animal = new Animal();
animal.setName("Lion");
animal.setId(1);
animals.put(animal.getName(), animal);

// to modify...

Animal lion = animals.remove("Lion"); // no looping, it finds it in constant time
lion.setName("Brown Lion");
animals.put(animal.getName(), animal);
Run Code Online (Sandbox Code Playgroud)