2013-03-08 4 views
17

मुझे पता है कि मैं इसके अलावा एक और [] जोड़कर एक सरणी में एक आयाम जोड़ सकता हूं। लेकिन क्या मेरे पास java.util.ArrayList में एक से अधिक आयाम हो सकते हैं? मैं इसे कैसे पूरा कर सकता हूं?दो आयामी ArrayList

+0

http: // stackoverflow का डुप्लिकेट।कॉम/प्रश्न/10866205/2-आयामी-सरणी-सूची – zardosht

उत्तर

22

हां, यह संभव है। बस अपने ArrayList के तत्व भी ArrayLists हो।

ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>(); 

यह ArrayLists, लेकिन अन्य संग्रह प्रकारों के साथ भी काम करेगा।

25
List<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>(); 

@ rgettman का जवाब काम किया हो जाता है, लेकिन वहाँ पर ध्यान देना कुछ चेतावनियां हैं:

चेतावनी 1: आयाम

सबसे आम उपयोग मामले में के आयाम सरणी, पूर्व-निर्धारित होते उदाहरण के लिए:

int[][] array = new int[5][6]; 

उस मामले में, सरणी आयामों के एक "आयताकार" फ़ॉर्म का हो जाएगा परिभाषित:

0 1 2 3 4 5 
0 [][][][][][] 
1 [][][][][][] 
2 [][][][][][] 
3 [][][][][][] 
4 [][][][][][] 

जैसा कि नीचे दी गई टिप्पणियों में किसी अन्य सदस्य द्वारा सुझाए गए अनुसार, इसके लिए और भी कुछ है। ए 'दो आयामी सरणी "केवल अन्य सारणियों की एक सरणी है, और कोड की रेखा से ऊपर के लिए कम हाथ है:

int[][] array = new int[5][]; 
array[0] = new int[6]; 
array[1] = new int[6]; 
array[2] = new int[6]; 
array[3] = new int[6]; 
array[4] = new int[6]; 

वैकल्पिक रूप से, बच्चे सरणियों विभिन्न आकारों के साथ instantiated किया जा सकता है जो मामले में "डेटा आकार" अब आयताकार होगा:

int[][] array = new int[5][]; 
array[0] = new int[2]; 
array[1] = new int[4]; 
array[2] = new int[1]; 
array[3] = new int[6]; 
array[4] = new int[3]; 

    0 1 2 3 4 5 
0 [][]   
1 [][][][]  
2 []   
3 [][][][][][] 
4 [][][] 

ArrayList<ArrayList<Integer>> दृष्टिकोण का उपयोग करते हुए जहां शामिल आपरेशन के परिणाम के रूप में बड़ा हो जाएगा सभी सूचियों की लंबाई प्रदर्शन एक "सूचियों की सूची" में परिणाम होगा।

आयामों को पूर्व परिभाषित करने के लिए कोई शॉर्टेंड नहीं है। बाल सूची को मास्टर सूची में डाला जाना चाहिए, और डेटा तत्वों को तब बाल सूचियों में डाला जाना चाहिए।

0 [][]  <- list with 2 elements 
1 [][][][] <- list with 4 elements 
2 []   ...and so on 
3 [][][][][][] 
4 [][][] 

चेतावनी 2: डेटा के आकार इस प्रकार दूसरे उदाहरण के समान हैं डेटा के मूलभूत मूल्यों

सरणी आदिम डेटा प्रकार के उपयोग की अनुमति (जैसे कि "int" के रूप में), और साथ उनके बॉक्स किए गए समकक्ष (जैसे "इंटीजर") के रूप में। जब तत्वों के डिफ़ॉल्ट मानों की बात आती है तो ये अलग-अलग व्यवहार करते हैं।

int[][] array1 = new int[5][6];   // all elements will default to 0 
Integer[][] array2 = new Integer[5][6]; // all elements will default to null 

सूचियां (अन्य सभी संग्रहों की तरह) केवल बॉक्स किए गए प्रकारों के उपयोग की अनुमति देते हैं। और इसलिए, जब सूची की लंबाई को पूर्व-परिभाषित करना संभव है, तो इसके तत्वों का डिफ़ॉल्ट मान हमेशा शून्य होगा।

List<Integer> = new ArrayList<Integer>(10); // all elements will default to null 
+0

सूची का उपयोग करें <सूची > परिणामस्वरूप एक त्रुटि होगी, सबसे अच्छा अपमान सूची है > – boctulus

+0

@paulkore, अगर हमारे पास दो आयामी 'ArrayList है तो पुनरावृत्ति कैसे करें <> 'या' सूची <> 'जैसा ऊपर दिखाया गया है? – OverrockSTAR

+4

@paulkore, रिकॉर्ड के लिए, यह ध्यान दिया जाना चाहिए कि एक दो आयामी सरणी (यदि एक समय में एक पंक्ति बनाई गई है) एक गैर-आयताकार "रैगर्ड" सरणी हो सकती है, जो आपकी सूची उदाहरण की तरह है। –

0

हाँ, आप कर सकते हैं! एक नियमित सरणी में, जब आप ब्रेसिज़ की दूसरी जोड़ी जोड़ते हैं, तो आप एक सामान्य सरणी बना रहे हैं जो ऑब्जेक्ट्स टाइप एरे स्टोर करता है। आप केवल वही काम कर सकते हैं, जिसमें ऐरेलिस्ट को चीजों की प्रकार है, ऐरेलिस्ट: ArrayList<ArrayList<Object>> list = new ArrayList<ArrayList<Object>>();

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