2010-09-07 25 views
9

यदि मेरे पास एक कक्षा है जिसे चर आयाम के तारों की एक सरणी वापस करने की आवश्यकता है (और वह आयाम केवल वर्ग की कुछ विधि चलाने पर निर्धारित किया जा सकता है), मैं अपने वर्ग के निर्माता में गतिशील सरणी कैसे घोषित करूं?जावा में गतिशील सरणी कैसे प्रारंभ करें?

तो सवाल काफी स्पष्ट नहीं था,

php में हम बस $my_string_array = array(); के रूप में तार की एक सरणी घोषित करने और द्वारा $my_string_array[] = "New value";

क्या जावा में तो उपरोक्त कोड बराबर है इसे करने के लिए तत्वों को जोड़ सकते हैं ?

उत्तर

13

आप java.util package, विशेष रूप से ArrayList वर्ग में देखना चाहते हैं। इसमें .add() .remove() .indexof() .contains() .toArray(), और अधिक के तरीके हैं।

+1

बस सटीक होने के लिए, यह 'java.util' में है (सभी अन्य संग्रह वर्गों के साथ)। 'java.util.Collections' (अपरकेस सी के साथ) एक उपयोगिता वर्ग है, पैकेज नहीं। –

+0

@ पीटर अच्छा पकड़, मैंने अनुवर्ती प्रश्न के रूप में –

+0

को पोस्ट किया है, क्या स्ट्रिंग इंडेक्स बनाना भी संभव है [उदा .: $ my_string_array ["property"]]? – lock

6

इसके बजाय List बनाएं।

List<String> l = new LinkedList<String>(); 
l.add("foo"); 
l.add("bar"); 
+3

अधिकांश उपयोग मामलों के लिए एक सरणी सूची एक बेहतर विकल्प है, लेकिन कक्षाओं के विरोध में इंटरफेस का उपयोग करके चर को घोषित करना हमेशा अच्छा होता है (इसलिए अंतर्निहित कार्यान्वयन को बदलने में आसान)। –

1

जावा में कोई गतिशील सरणी नहीं, सरणी की लंबाई तय की गई है। इसी तरह की संरचना ArrayList है, एक असली सरणी इसे अंतर्निहित लागू किया गया है। नाम सरणी सूची :) देखें

7

सादा जावा सरणियों (यानी String[] strings) गतिशील रूप से आकार नहीं बदला जा सकता है; जब आप कमरे से बाहर होते हैं लेकिन आप अभी भी अपने सरणी में तत्व जोड़ना चाहते हैं, तो आपको एक बड़ा निर्माण करना होगा और मौजूदा सरणी को अपनी पहली n स्थितियों में कॉपी करना होगा।

सौभाग्य से, java.util.List कार्यान्वयन हैं जो आपके लिए यह काम करते हैं। java.util.ArrayList और java.util.Vector दोनों arrays का उपयोग करके लागू किए गए हैं।

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

  • ArrayList - मूल सरणी आधारित कार्यान्वयन,
  • Vector सिंक्रनाइज़ नहीं - सिंक्रनाइज़, सरणी आधारित कार्यान्वयन
  • LinkedList - दोगुना लिंक सूची कार्यान्वयन, बीच में आइटम डालने के लिए तेजी से सूची

क्या आप उम्मीद करते हैं कि आपकी सूची में डुप्लिकेट आइटम हों? यदि आपके उपयोग के मामले में डुप्लिकेट आइटम कभी मौजूद नहीं होना चाहिए, तो आपको java.util.Set पसंद करना चाहिए। सेट्स को डुप्लिकेट आइटम रखने की गारंटी नहीं है। एक अच्छा सामान्य उद्देश्य सेट कार्यान्वयन java.util.HashSet है। अनुवर्ती

उत्तर

एक सूचकांक $my_string_array["property"] के लिए इसी तरह का उपयोग कर का उपयोग करने के लिए तार सवाल, आप एक Map<String, String> में डाल करने के लिए भी java.util पैकेज में की जरूरत है। एक अच्छा सामान्य उद्देश्य मानचित्र कार्यान्वयन HashMap है।

एक बार जब आप अपने नक्शे बना लिया है,

  • उपयोग map.put("key", "string") उसके प्रमुख द्वारा एक स्ट्रिंग का उपयोग करने की तार
  • उपयोग map.get("key") जोड़ने के लिए।

ध्यान दें कि java.util.Map में डुप्लिकेट कुंजी नहीं हो सकती हैं। यदि आप उसी कुंजी के साथ लगातार put पर कॉल करते हैं, तो केवल नवीनतम कॉल में सेट मान ही रहेगा, पहले वाले लोग खो जाएंगे। लेकिन मुझे लगता है कि यह PHP सहयोगी सरणी के लिए भी व्यवहार है, इसलिए यह आश्चर्यचकित नहीं होना चाहिए।

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