2012-02-29 11 views
8

En la inicialización lista de arreglo normal, Se utilizó para definir el tipo genérico de la siguiente manera,tipo genérico para Arraylist de ArrayLists

List<String> list1 = new ArrayList<String>(); 

Pero en caso de ArrayList de ArrayLists, ¿Cómo podemos definir su tipo genérico?

El código para la lista de arreglo de las listas de matriz es la siguiente:

ArrayList[] arr=new ArrayList[n]; 
for(int i=0;i<n;i++) 
{ 
arr[i]=new ArrayList(); 
} 

Sólo compartir la sintaxis, si alguien tiene idea sobre esto ..!

+3

esto es un ** arreglo ** de objetos ArrayList –

+0

Gracias Andreas .., Hasta ahora solo pensaba que era un Arraylist de ArrayLists, ahora lo tengo, ¡es un objeto Array of ArrayList ..! Ok, entonces, ¿cómo podemos definir el tipo genérico para eso ...? Algunas ideas..? –

+0

Ver mi respuesta. No es posible. No hay matrices genéricas con java. –

Respuesta

12

Usted puede simplemente hacer

List<List<String>> l = new ArrayList<List<String>>(); 

Si necesita una serie de listas, puede hacerlo

List<String>[] l = new List[n]; 

y segura ignorar o suprimir la advertencia.

+1

"Ignore o elimine de forma segura la advertencia."No creo que escribir código que cause advertencias deliberadamente debe considerarse" seguro ". –

+1

@ TomHawtin-tackline es bastante seguro. La nueva matriz no contiene objetos de lista, por lo tanto no contiene listas que no sean' List '. el compilador simplemente no es lo suficientemente inteligente como para reconocer esto. (Y no está permitido ser más inteligente, por especificación). Si desea una matriz de listas (para evitar el direccionamiento indirecto o espacio adicional de ArrayList, por ejemplo), existe no hay forma de hacer esto sin una advertencia. –

+0

Tienes que confiar en una línea de razonamiento en lugar de dejar que el compilador maneje las tonterías./Como sucede, 'l' puede tener una' Lista 'agregada, aunque compiladores más recientes darle otra advertencia ("tipo de rawtypes") –

4

Si usted (en realidad) desea una lista de listas, entonces esta es la declaración correcta:

List<List<String>> listOfLists = new ArrayList<List<String>>(); 

No podemos crear matrices genéricas. new List<String>[0] es un error de compilación.

0

Algo como esto:

List<List<Number>> matrix = new ArrayList<List<Number>>(); 
for (int i = 0; i < numRows; ++i) { 
    List<Number> row = new ArrayList<Number>(); 
    // add some values into the row 
    matrix.add(row); 
} 

Hacer el tipo de la Lista interior todo lo que quieras; esto es solo para fines ilustrativos.

0

Estás hablando de una matriz de listas (ArrayLists para ser más específico). Java no permite la generación de matrices genéricas (excepto cuando se usan comodines, consulte el siguiente párrafo). Entonces, o bien debe olvidarse de usar genéricos para la matriz, o usar una lista en lugar de una matriz (muchas soluciones propuestas para esto).

Presupuesto de IBM article:

Otra consecuencia del hecho de que las matrices son covariantes, pero los genéricos no son es que no se puede crear una instancia de una matriz de un tipo genérico (nueva lista de [3] es ilegal), a menos que el El argumento tipo es un comodín ilimitado (la nueva lista <?> [3] es legal).

0

Tienes razón: Esto parece una locura. (Mayo su un fallo ...) en lugar de utilizar

ArrayList<String>[] lst = new ArrayList<String>[]{}; 

Uso:

ArrayList<String>[] list1 = new ArrayList[]{}; 

va a trabajar para la declaración, incluso si no describir un genérico congrete!

+1

¿por qué está creando una clase anónima? – newacct

Cuestiones relacionadas