2013-03-09 5 views
7

मेरी जावा कोड में, मैं ArrayList की एक सूची बनाने की कोशिश, इस प्रकार के रूप में मेरे कोड है,[Ljava.lang.Object; [Ljava.util.ArrayList को नहीं डाला जा सकता है;

private ArrayList<Integer>[] listoflist; 
listoflist = (ArrayList<Integer>[]) new Object[875715]; 

हालांकि, जब मैं कोड संकलन, संकलक कह रहता है कि

[Ljava.lang.Object; [Ljava.util.ArrayList को नहीं डाला जा सकता है;

मैं पूछ सकता हूँ कारण है कि मैं वस्तु [] [] ArrayList में ढाला नहीं कर सकते हैं?

+8

आप * क्यों * उम्मीद कर सकते हैं? –

+4

क्योंकि आप पैरामीटर प्रकार के लिए गैर-पैरामीटर प्रकार: 'ऑब्जेक्ट' डालने का प्रयास कर रहे हैं: 'ArrayList '। – Rob

+0

और आप क्या करने की उम्मीद करते हैं? –

उत्तर

4

आपने कहा कि आप का निर्माण करने के प्रयास कर रहे हैं ArrayLists की एक सूची। लेकिन ... आप ऐसा करने के लिए एक सरणी का उपयोग करने की कोशिश कर रहे हैं ... क्यों न केवल एक अन्य ArrayList का उपयोग करें? यह वास्तव में बहुत आसान है:

ArrayList<Integer> list1 = new ArrayList<Integer>(); 
list1.add(Integer.valueOf(3)); 
list1.add(Integer.valueOf(4)); 
ArrayList<Integer> list2 = new ArrayList<Integer>(); 
list2.add(Integer.valueOf(6)); 
list2.add(Integer.valueOf(7)); 
listoflist.add(list1); 
listoflist.add(list2); 

कह ArrayList<ArrayList<Integer>> तो कई बार, थोड़े अजीब है, इसलिए जावा 7 में निर्माण सिर्फ new ArrayList<>(); हो सकता है (यह प्रकार infers:

private List<List<Integer>> listoflist = new ArrayList<ArrayList<Integer>>(); 

यहाँ यह का उपयोग करने का एक उदाहरण है वेरिएबल से आप इसे असाइन कर रहे हैं)।

+0

धन्यवाद, महान जवाब! – Bpache

4

जावा strong typed language है - इसलिए आप केवल एक प्रकार को दूसरे प्रकार में नहीं डाल सकते हैं। हालांकि आप उन्हें परिवर्तित कर सकते हैं।

Object[]List करने के मामले में बस

Object[] arr = new Object[]{...}; 
List<Object> list = Arrays.asList(arr); 

का उपयोग करें और आप एक ArrayList, उदा के रूप में उपयोग करना चाहते हैं आप कुछ अन्य तत्वों जोड़ना चाहते हैं, बस लपेट फिर

ArrayList<Object> arrList = new ArrayList<Object>(Arrays.asList(arr)); 
+0

समझें बहुत बहुत धन्यवाद। – Bpache

-2

निम्नलिखित की तरह एक पंक्ति में परिभाषित, संकलक शिकायत नहीं है

private ArrayList[] listoflist = (ArrayList<Integer>[]) new Object[10]; 
+2

आप गलत हैं, यह वही कथन है, लेकिन एक ही चेतावनी के साथ अलग-अलग लिखा गया है: 'सुरक्षा टाइप करें: ऑब्जेक्ट से अनचेक कास्ट [] से ArrayList [] ', और एक ही त्रुटि:' [Ljava.lang.Object ; [Ljava.util.ArrayList; ' – Rob

+0

@Rob: समझा जा सकता है। लेकिन जब मैंने इसे ग्रहण करने की कोशिश की तो यह त्रुटि दे रहा था। लेकिन एक पंक्ति के बाद, यह आपके द्वारा वर्णित चेतावनी दे रहा है। – AmitG

1

आप एरे-आयामी ऐरे की तरह, एक एन-आयामी ऐरेलिस्ट बना सकते हैं, ऐरेलिस्ट को ArrayLists में डालकर।

यहां अवधारणा को दिखाने के लिए 3 आयामों वाला एक उदाहरण है।

public static void main(String args[]){ 
    ArrayList<ArrayList<ArrayList<Integer>>> listOfListOfList = new ArrayList<ArrayList<ArrayList<Integer>>>(); 
    int firstDimensionSize = 3; 
    int secondDimensionSize = 4; 
    int thirdDimensionSize = 5; 

    for (int i = 0; i < firstDimensionSize; i++) { 
     listOfListOfList.add(new ArrayList<ArrayList<Integer>>(vertices)); 
     for (int j = 0; j < secondDimensionSize; j++) { 
      listOfListOfList.get(i).add(new ArrayList<Integer>()); 
      for(int k = 0; k < thirdDimensionSize; k++) { 
       listOfListOfList.get(i).get(j).add(k); 
      } 
     } 
    } 
} 

ध्यान दें कि आप < नई ArrayList < के बाद खाली छोड़ सकते हैं>>। जावा 7 का मानना ​​है कि जावा इस प्रकार का अनुमान लगाएगा (इससे कोई फर्क नहीं पड़ता कि कैसे घोंसला हुआ)। उदाहरण के लिए और अधिक स्पष्ट करने के लिए, मैंने उन्हें उदाहरण के लिए नीचे लिखा है कि आप प्रत्येक स्तर पर किस प्रकार का संचालन कर रहे हैं। आप अपने कोड को और अधिक पठनीय बनाने के लिए अभी भी उन्हें लिख सकते हैं।

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