2010-03-12 14 views
5

क्या निम्न करने के लिए सबसे अच्छा तरीका है:पाश के लिए के माध्यम से अलग नाम के साथ वस्तुओं को जोड़ने

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
    MyObject o1 = new MyObject(); 
    list.add(o1); 
} 

लेकिन चीजें मैं ही नाम के साथ वस्तुओं को बनाने चाहते हैं नहीं है, उन्हें अलग नाम के साथ बनाने मैं चाहता हूँ o1,o2,o3,o4,o5,o6,o7,o8,o9,o10 की तरह और मैं प्रत्येक सूची में जोड़ना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है ?

+2

क्षमा करें, लेकिन नाम के साथ आपका क्या मतलब है? स्थानीय चर का नाम संकलक द्वारा हटा दिया जाता है। –

+2

यहां बड़ा सवाल क्यों है? इस मामले में परिवर्तनीय का नाम किसी भी मामले में फोर्लोप (या फिर भी फॉलोअप के अगले पुनरावृत्ति में) से बाहर नहीं टिकेगा। इसका नाम कैसे/क्यों महत्वपूर्ण है? – GWLlosa

+1

आपको अपने ऑब्जेक्ट का परिवर्तनीय नाम लूप के अंदर क्यों अलग करने की आवश्यकता है? आपके द्वारा दिए गए उदाहरण में परिवर्तनीय नाम अप्रासंगिक हैं ... –

उत्तर

10

आपको प्रत्येक ऑब्जेक्ट के लिए एक अलग नाम का उपयोग करने की आवश्यकता नहीं है। चूंकि ओ 1 ऑब्जेक्ट को लूप के भीतर घोषित किया गया है, ओ 1 वैरिएबल का दायरा लूप तक ही सीमित है और इसे प्रत्येक पुनरावृत्ति के दौरान पुनर्निर्मित किया जाता है ... प्रत्येक बार यह उस पुनरावृत्ति के दौरान बनाए गए नए ऑब्जेक्ट को संदर्भित करता है। ध्यान दें कि चर स्वयं सूची में संग्रहीत नहीं है, केवल वह ऑब्जेक्ट जिसका वह संदर्भ दे रहा है।

आप नए अन्य की तुलना में यह सूची में जोड़ने के उद्देश्य के साथ कुछ और करने की जरूरत नहीं है, तो आप कर सकते हैं:

for(int i=0; i<30;i++) 
{ 
    list.add(new MyObject()); 
} 
+0

उनके प्रश्न का उत्तर नहीं। – Younes

+3

कैसे? मुझे एक बिल्कुल अच्छा जवाब की तरह लग रहा है। – razlebe

+1

हम्म, मैंने शायद गलत तरीके से सवाल पढ़ा .. मैंने सोचा कि वह अपनी वस्तुओं का नाम देने के बाद था: ओ 1, ओ 2, ओ 3, ओ 4, ओ 5, ओ 6, ओ 7, ओ 8, ओ 9, ओ 10। जिस बिंदु को मैंने वापस ले लिया, उसे छोड़ दिया;)। – Younes

1

आपका वस्तुओं के नाम नहीं है। परिवर्तनीयo1 का नाम है, लेकिन यह ऑब्जेक्ट से जुड़ा हुआ नहीं है सिवाय इसके कि चर वस्तु को संदर्भित करता है। सूची में ऑब्जेक्ट को कभी भी o1 वैरिएबल द्वारा संदर्भित करने का कोई ज्ञान नहीं है।

आप क्या कर रहे के लिए, आप एक चर बिल्कुल, की जरूरत नहीं है के रूप में स्टीफन अपने जवाब में कहा कि तुम सिर्फ सीधे वस्तुओं जोड़ सकते हैं: अपने पाश के संदर्भ में

for (int i=0; i<30;i++) 
{ 
    list.add(new MyObject()); 
} 
2

, आप आपके द्वारा बनाए गए प्रत्येक नए इंस्टेंस के नाम के साथ आने के बारे में चिंता करने की आवश्यकता नहीं है। यह कहना पर्याप्त है कि

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
list.add(new MyObject()); 
} 
6

आप उन्हें अलग-अलग नाम क्यों देना चाहेंगे? आप लूप के अंदर ऑब्जेक्ट बना रहे हैं, इसलिए यह बाहर मौजूद नहीं है, और मैं उन्हें अलग-अलग नाम देने का कोई कारण नहीं देखता हूं।

आपके प्रश्न का उत्तर करने के लिए: एक ही रास्ता मैं देख रहा हूँ, लेकिन मैं गलत हो सकता है, MyObjects की एक सरणी बनाने के लिए है और कार्य करें:

List<MyObject> list = new LinkedList<MyObject>(); 
MyObject[] o = new MyObject[30]; 

for(int i = 0; i < 30; i++) { 
    o[i] = new MyObject(); 
    list.add(o[i]); 
} 
+0

यह मेरा जवाब होगा, लेकिन यह कहकर कि लूप के बाहर ऑब्जेक्ट मौजूद नहीं है, यह केवल वैरिएबल है जो लूप के बाहर अमान्य है। सूची में वस्तु अभी भी (संदर्भित) हैं। –

+0

सच, चर का मतलब है। उस पर एक संपादन किया। – martiert

2

तुम कर सकते हो (क्या है कि हालांकि बहुत नहीं होगा भावना या तो), एक सूची

Map<String, MyObject> map = new HashMap<String, MyObject>(); 

for (int i = 0; i < 10; i++) { 
    map.put("o" + i, new MyObject()); 
} 
-1

के बजाय एक मानचित्र का उपयोग वस्तु कोई नाम दें बनाएं, अपने कंस्ट्रक्टर्स जोड़ना है। फिर ऑब्जेक्ट का नाम सरणी सूची में जोड़ें।

1
doing it this way: 

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
list.add(new MyObject()); 
} 

when i try to read the objects from the list they all return the same object with same values for instance variables. 

i have an Emp class with 3 instance variables 
name,dob and salary these values are read from list lst1. 

for(int k=0;k<lst1.size();k++){ 

obj1=new Emp((lst1.get(k).get("name")),(lst1.get(k).get("dob")), 

(lst1.get(k).get("salary"))); 

     lst3.add(k,obj1); 
      } 

but on reading lst3.get(3) or lst3.get(0) 

Emp temp=lst3.get(3); 

String name=temp.name; 

come same as 

Emp temp=lst3.get(0); 

String name=temp.name; 

please provide me with a solution 
संबंधित मुद्दे