2012-12-05 20 views
7

में प्रतिस्थापित करना मुझे यह जानने की आवश्यकता है कि ArrayList<Animal> में किसी ऑब्जेक्ट को कैसे प्रतिस्थापित करें।किसी ऑब्जेक्ट को ArrayList

मेरे पास 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. 

बाद में, मैं इस सरणी सूची से एक वस्तु ले जाऊंगा और इसे संशोधित कर दूंगा।

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

अब मुझे इस पशु वस्तु को ArrayList<Animal> a सरणी सूची में जोड़ने की आवश्यकता है। मुझे पिछले Animal ऑब्जेक्ट को प्रतिस्थापित करने की आवश्यकता है जिसे हमने इसे Lion नाम दिया है। मैं यह कैसे कर सकता हूँ ?

नोट: मैं उस वस्तु को नहीं जानता जहां यह ऑब्जेक्ट जोड़ा गया है।

+0

अवहेलना के साथ बेहतर होगा बराबर तो आप 'indexOf' का उपयोग सूचकांक का निर्धारण कर सकते हैं। –

उत्तर

1

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

मैंने अभी तक अपना कोड नहीं आजमाया है। लेकिन मैं जानना चाहता हूं कि शेर के नाम को संशोधित करके, यह हैश मैप को कैसे अपडेट करेगा? क्या आपको कुछ याद आया? जैसे, क्या मुझे यह 'जानवरों .पुट ("शेर", शेर) कहना है; '? – user1315906

+0

आप सही हैं, मुझे कुछ याद आया। मैं इसे – durron597

+1

@ user1315906 संपादित करूंगा: वैसे, अगर आपको आईडी द्वारा जानवरों तक पहुंचने की ज़रूरत है, तो आपके पास दोनों चाबियों के साथ दो अलग-अलग 'हैश मैप' हो सकते हैं, अगर आप ऐसा करते हैं तो सही तरीके से अपडेट करना सुनिश्चित करें। – durron597

6

आपको पहले सूची से अपना संदर्भ प्राप्त करना होगा और बस इसे संशोधित करना होगा। इस तरह:

Integer yourId = 42; 

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

अगर मैं जानवर की आईडी का उपयोग करके तुलना करना चाहता हूं, और उदाहरण में दिखाए गए getName का उपयोग करके नहीं -> 'if (a.getName() बराबर ("शेर")) {' – 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 के साथ सूची में, 012 का उपयोग करें। List#set का उपयोग करने के लिए, आपको Animal की अनुक्रमणिका को जानना होगा, जिसे आप प्रतिस्थापित करना चाहते हैं। आप इसे List#indexOf के साथ पा सकते हैं।

यदि आप को पहले से सेट में मौजूद जानवर को संशोधित करना चाहते हैं, तो आपको सूची में कुछ भी करने की ज़रूरत नहीं है, क्योंकि सूची में जो भी संग्रहीत है, वह वस्तु का संदर्भ है, न कि प्रतिलिपि उदेश्य।

1

आप आसानी से इस के लिए हैश मैप का उपयोग कर सकते हैं। आपकी कुंजी आईडी है और मूल्य पशु वस्तु है।

get विधि का उपयोग करके आप आवश्यक पशु वस्तु ले सकते हैं और संशोधन कर सकते हैं और फिर एक ही कुंजी के खिलाफ नए पशु डाल सकते हैं।

संबंधित मुद्दे