it-swarm-pt.tech

Crie uma matriz de arraylists

Eu estou querendo criar uma matriz de arraylist como abaixo:

ArrayList<Individual>[] group = new ArrayList<Individual>()[4]

Mas não está compilando. Como posso fazer isso?

146
user

De acordo com Documentação do Oracle :

"Você não pode criar matrizes de tipos parametrizados"

Em vez disso, você poderia fazer:

ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);

Como sugerido por Tom Hawting - tackline, é ainda melhor fazer:

List<List<Individual>> group = new ArrayList<List<Individual>>(4);
126
MByD

Como os outros mencionaram, provavelmente é melhor usar outra lista para armazenar o ArrayList, mas se você tiver que usar um array:

ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
83
Marcus

Isso funciona:

ArrayList<String>[] group = new ArrayList[4];
71
kelvincer

Você pode criar uma classe estendendo ArrayList

class IndividualList extends ArrayList<Individual> {

}

e depois criar o array

IndividualList[] group = new IndividualList[10];
23
user2558221

Eu totalmente não entendi, porque todo mundo está sugerindo o tipo de genérico sobre o array particularmente para esta questão.

E se minha necessidade for indexar n arraylists diferentes.

Com a declaração List<List<Integer>> eu preciso criar objetos nArrayList<Integer> manualmente ou colocar um loop for para criar listas n ou de alguma outra forma, de qualquer forma sempre será meu dever criar listas n.

Não é ótimo se nós declararmos isso por meio da transmissão como List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]. Eu vejo isso como um bom design, onde não é necessário criar todo o objeto de indexação (arraylists) sozinho

Alguém pode me esclarecer por que isso (arrayform) será um projeto ruim e quais são suas desvantagens?

15
smslce

Você pode criar Array of ArrayList

List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
    outer[i] = new ArrayList<>();
}

Isso será útil em cenários como este. Você sabe o tamanho do exterior. Mas o tamanho dos internos varia. Aqui você pode criar uma matriz de comprimento fixo que contém listas de matriz que variam de tamanho. Espero que isso seja útil para você.

Em Java 8 e acima você pode fazer isso de uma maneira muito melhor.

List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());

Melhor ainda usando referência de método

List<Integer>[] outer = new List[10];
Arrays.setAll(outer,  ArrayList :: new);
10
Arjun Nagathankandy

O problema com esta situação é usar um arraylist para obter uma complexidade de tempo de o(n) para adicionar em uma posição específica. Se você usa um array, você cria um local de memória declarando seu array, portanto, é constante

6
Mark Odey

Isso funciona, array de ArrayList. Tente entender como funciona.

import Java.util.*;

public class ArrayOfArrayList {
    public static void main(String[] args) {

        // Put the length of the array you need
        ArrayList<String>[] group = new ArrayList[15];
        for (int x = 0; x < group.length; x++) {
            group[x] = new ArrayList<>();
        }

        //Add some thing to first array
        group[0].add("Some");
        group[0].add("Code");

        //Add some thing to Secondarray
        group[1].add("In here");

        //Try to output 'em
        System.out.println(group[0]);
        System.out.println(group[1]);
    }
}

Créditos para Kelvincer para alguns dos códigos.

5
Rich

Você não pode criar uma matriz de tipo genérico. Criar Lista de ArrayLists:

 List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();

ou se você realmente precisa de array (ATENÇÃO: design ruim!):

 ArrayList[] group = new ArrayList[4];
3
Piotr Gwiazda
  1. Criação e inicialização

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  2. Acesso de gravação

    yourArray[i]= someArrayList;
    

    para acessar elementos da ArrayList interna:

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
    
  3. Acesso de leitura

    para ler o elemento da matriz i como uma conversão de tipo de uso ArrayList:

    someElement= (ArrayList<YourType>) yourArray[i];
    

    para o elemento da matriz i: para ler o elemento ArrayList no índice j

    arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
    
2
Amr Lotfy

List [] listArr = novo ArrayList [4];

Acima da linha dá aviso, mas funciona (ou seja, cria Array of ArrayList)

1
ashu17188

Para declarar uma matriz de ArrayLists estaticamente para, digamos, posições de Sprite como Pontos:

ArrayList<Point>[] positionList = new ArrayList[2];

public Main(---) {
    positionList[0] = new ArrayList<Point>(); // Important, or you will get a NullPointerException at runtime
    positionList[1] = new ArrayList<Point>();
}

dinamicamente:

ArrayList<Point>[] positionList;
int numberOfLists;

public Main(---) {
    numberOfLists = 2;
    positionList = new ArrayList[numberOfLists];
    for(int i = 0; i < numberOfLists; i++) {
        positionList[i] = new ArrayList<Point>();
    }
}

Apesar das precauções e algumas sugestões complexas aqui, descobri que uma matriz de ArrayLists é uma solução elegante para representar ArrayLists relacionados do mesmo tipo.

1
Androidcoder

Você pode criar assim ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

Você tem que criar matriz de tipo não genérico e, em seguida, convertê-lo em um genérico.

1
Tejendra

ArrayList<Integer>[] graph = new ArrayList[numCourses] Funciona.

0
xiankun zhu
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
   al[i] = new ArrayList<String>();
}
0
HeadAndTail
ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10]; 
0
Labeo

Eu acho isso mais fácil de usar ...

static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
 group=new ArrayList[size];
 for(int i=0;i<size;i++)
 {
  group[i]=new ArrayList<Individual>();
 }
0
Creative_Cimmons

Você consegue fazer isso :

// Cria uma matriz do tipo ArrayList

`ArrayList<Integer>[] a = new ArrayList[n];`

// Para cada elemento na matriz, faça um ArrayList

for(int i=0; i<n; i++){ 
    a[i] = new ArrayList<Integer>();
}
0
Nishant Salhotra