2012-12-05 63 views
7

我需要知道如何替换ArrayList<Animal>中的对象。我有一个数组列表,名为ArrayList<Animal>。这个列表只有5个动物列出了init。替换ArrayList中的对象

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. 

稍后,我将从该数组列表中取一个对象并对其进行修改。

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

现在我需要这种动物对象添加到ArrayList<Animal> a数组列表。我需要它来取代之前的Animal对象,我们将它命名为Lion。我怎样才能做到这一点 ?

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

+0

覆盖等于那么你可以使用'indexOf'来确定索引。 –

回答

1

看看belum的帖子,如何用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); 
+0

我还没有尝试过你的代码。但我想知道它将如何更新HashMap,只需修改Lion的名称?你错过了什么?像,我必须说这个'animals.put(“狮子”,狮子);'? – user1315906

+0

你说得对,我错过了一些东西。我会编辑 – durron597

+1

@ user1315906:顺便说一句,如果你需要通过ID访问动物以及,你可以有两种不同的'HashMap's有两个按键,只要确保如果你这样做正确更新。 – durron597

6

您必须首先从列表中的参考,并简单地修改它。就像这样:

Integer yourId = 42; 

for (Animal a : animalList){ 
    if (a.getId().equals(yourId)){ 
      a.setName("Brown Lion"); 
      //... 
      break; 
    } 
} 
+0

如果我想用动物的ID做比较,而不是像例子中那样使用getName - > if(a.getName()。equals(“Lion”)){' – user1315906

+0

@ user1315906我更新了我的答案。 – bellum

2
for(Animal al: a){ 
    if(al.getName().equals("Lion")){ 
     al.setName("Brown Lion"); 
     al.setId(1); 
     break; 
    } 
} 
  1. 环通你的清单,直到你找到动物
  2. 更改其属性
  3. 休息失控环
7

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

如果你只是想修改动物已在一组,你没有与名单做任何事情,因为存储的内容在列表是对对象的引用,而不是一个副本物体。

1

你可以用HashMap这一点很容易。你的关键是id,value是动物对象。

通过使用get方法你可以把你需要的动物对象,做修改,并再次把新的动物对同一把钥匙。