2013-03-09 17 views
7

Nel mio codice Java, cerco di costruire una lista di ArrayList, il mio codice è il seguente,[Ljava.lang.Object; non può essere lanciato su [Ljava.util.ArrayList;

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

Tuttavia, quando compilo il codice, il compilatore continua a dire che

[Ljava.lang.Object; non può essere lanciato su [Ljava.util.ArrayList;

Posso chiedere perché non posso lanciare Object [] per ArrayList []?

+8

Perché * dovresti * essere in grado di? –

+4

Poiché stai provando a lanciare un tipo non parametrizzato: 'Object', su un tipo parametrizzato:' ArrayList '. – Rob

+0

E cosa ti aspetti di fare? –

risposta

4

Lei ha detto che si sta cercando di costruire un elenco di liste di array. Ma ... stai provando a usare un array per farlo ... Perché non usare solo un altro ArrayList? In realtà è piuttosto semplice:

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

Ecco un esempio di utilizzo:

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); 

Dicendo ArrayList<ArrayList<Integer>> tante volte è un po 'strano, così in Java 7 della costruzione può essere solo new ArrayList<>(); (che deduce il tipo dalla variabile a cui lo stai assegnando).

+0

grazie, ottima risposta! – Bpache

4

Java è un strong typed language - quindi non è possibile semplicemente trasmettere un tipo all'altro. Tuttavia è possibile convertirli.

In caso di Object[] per List semplicemente utilizzare

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

e se si desidera utilizzarlo come un ArrayList, per esempio se si desidera aggiungere alcuni altri elementi, è sufficiente avvolgere nuovamente

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

grazie mille. – Bpache

-2

definiscono in linea singola come seguire, compilatore non si lamenta

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

Ti stai sbagliando, questa è esattamente la stessa affermazione ma scritta in modo diverso, con lo stesso avviso: 'Digita sicurezza: cast non controllato da Oggetto [] a ArrayList []', e lo stesso errore: '[Ljava.lang.Object ; non può essere lanciato su [Ljava.util.ArrayList; ' – Rob

+0

@Rob: capito. Ma quando ho provato a farlo eclipse, ha dato un errore. Ma dopo la singola riga, sta dando un avvertimento che hai menzionato. – AmitG

1

È possibile creare un ArrayList n-dimensionale, proprio come un array n-dimensionale, inserendo elenchi di array in elenchi di array.

Ecco un esempio con 3 dimensioni per mostrare il concetto.

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); 
      } 
     } 
    } 
} 

Si noti che è possibile lasciare il <> vuota dopo che il nuovo ArrayList <>. Java dedurrà il tipo (non importa quanto nidificato), dal momento che java 7 credo. Li ho appena annotati nell'esempio per mostrare quale tipo si sta trattando a tutti i livelli, per rendere l'esempio più chiaro. Puoi ancora scriverli per rendere il tuo codice più leggibile.

Problemi correlati