2012-12-05 65 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方法你可以把你需要的動物對象,做修改,並再次把新的動物對同一把鑰匙。