Como posso inicializar uma Array
de ArrayList
?
Eu tentei esta syntax mas não funcionou:
ArrayList[] subsection = new ArrayList[4];
Essa syntax funciona bem para o ArrayList
não genérico. (ideone)
Mas não vai funcionar para o genérico ArrayList
: (ideone)
Este código:
ArrayList[] subsection = new ArrayList [4];
Dá um erro no compilador:
Main.java:8: criação de array genérico ArrayList[] subsection = novo ArrayList <> [4];
Para a versão genérica, use um ArrayList
:
ArrayList> subsection = new ArrayList>();
você pode definir assim:
ArrayList[] lists = (ArrayList [])new ArrayList[10]; lists[0] = new ArrayList (); lists[0].add("Hello"); lists[0].add("World"); String str1 = lists[0].get(0); String str2 = lists[0].get(1); System.out.println(str1 + " " + str2);
Ok depois de comentar, eu pensei bem … seu direito porque não.
Descobri isso.
ArrayList[] test = new ArrayList[4]; test[3] = new ArrayList(); test[3].add("HI"); System.out.println(test[3].get(0));
Embora eu seja honesto, não tenho certeza porque isso funciona.
Depois de atribuir o primeiro item de teste como uma nova coleção, ele permitirá que todos os outros itens da matriz sejam desse tipo. Então você não pode fazer
test[3] = new ArrayList(); test[2] = new HashSet ();
Olhe para os genéricos como processo de clarificação do tipo, você pode atribuir o valor typescript a uma variável do tipo bruto E vice-versa. Em core generics, há um atalho para os programadores evitarem que o tipo de conversão seja muito grande, o que também ajuda a detectar alguns erros lógicos em tempo de compilation. Nos mesmos aspectos, o ArrayList sempre implicitamente terá itens do tipo Object.
assim
test[i] = new ArrayList(); because test[i] has type of ArrayList.
O pouco
test[3] = new ArrayList(); test[2] = new HashSet ();
não funcionou – como era esperado, porque o HashSet simplesmente não é uma subclass de ArrayList. Genéricos não tem nada para fazer aqui. Tire os genéricos e você verá o motivo óbvio.
Contudo,
test[2] = new ArrayList(); test[3] = new ArrayList();
funcionará bem, porque ambos os itens são ArrayLists.
Espero que isso tenha feito sentido …