web-dev-qa-db-fra.com

Créer un tableau d'arraylistes

Je veux créer un tableau d'arraylist comme ci-dessous:

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

Mais ce n'est pas la compilation. Comment puis-je faire ceci?

146
user

Selon Documentation Oracle :

"Vous ne pouvez pas créer de tableaux de types paramétrés"

Au lieu de cela, vous pourriez faire:

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

Comme suggéré par Tom Hawting - tackline, il est encore mieux de faire:

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

Comme d'autres l'ont mentionné, il est probablement préférable d'utiliser une autre liste pour stocker le tableau ArrayList, mais si vous devez utiliser un tableau:

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

Cela marche:

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

Vous pouvez créer une classe qui étend ArrayList

class IndividualList extends ArrayList<Individual> {

}

puis créer le tableau

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

Je ne comprends absolument pas, pourquoi tout le monde suggère le type génrique plutôt que sur le tableau, en particulier pour cette question.

Et si mon besoin est d’indexer n différents arraylists.

Pour déclarer List<List<Integer>>, je dois créer des objets nArrayList<Integer> manuellement ou placer une boucle for pour créer des listes n ou d’une autre manière. De toute façon, il sera toujours de mon devoir de créer des listes n.

N'est-ce pas formidable si nous le déclarons par le biais du casting comme étant List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]. Je le vois comme un bon design où il n’est pas nécessaire de créer tout l’objet d’indexation (arraylists) tout seul.

Quelqu'un peut-il m'expliquer pourquoi cela (tableau) sera un mauvais design et quels sont ses inconvénients?

15
smslce

Vous pouvez créer un tableau de tableauListe

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

Cela sera utile dans des scénarios comme celui-ci. Vous connaissez la taille de l'extérieur. Mais la taille des intérieurs varie. Ici, vous pouvez créer un tableau de longueur fixe contenant des listes de tableaux variant en taille. J'espère que cela vous sera utile.

Dans Java 8 et au-dessus, vous pouvez le faire d'une bien meilleure façon.

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

Encore mieux en utilisant référence de la méthode

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

Le problème avec cette situation est qu'en utilisant un arraylist, vous obtenez une complexité temporelle de o(n) pour l'ajouter à un poste spécifique. Si vous utilisez un tableau, vous créez un emplacement mémoire en déclarant votre tableau, il est donc constant.

6
Mark Odey

Cela fonctionne, tableau de ArrayList. Essayez de comprendre comment cela fonctionne.

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édits à Kelvincer pour certains codes.

5
Rich

Vous ne pouvez pas créer de tableau de type générique. Créer une liste de tableaux:

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

ou si vous avez VRAIMENT besoin de tableau (ATTENTION: mauvais design!):

 ArrayList[] group = new ArrayList[4];
3
Piotr Gwiazda
  1. Création et initialisation

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  2. Accès en écriture

    yourArray[i]= someArrayList;
    

    pour accéder aux éléments internes de ArrayList:

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
    
  3. Accès en lecture

    pour lire un élément de tableau i en tant que ArrayList, utilisez le transtypage de type:

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

    pour l'élément de tableau i: pour lire l'élément ArrayList à l'index j

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

List [] listArr = new ArrayList [4];

La ligne ci-dessus donne un avertissement, mais cela fonctionne (c.-à-d. Qu'il crée un tableau de ArrayList)

1
ashu17188

Pour déclarer un tableau de ArrayLists de manière statique pour, disons, les positions des sprites sous forme de points:

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

dynamiquement:

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

En dépit des mises en garde et de certaines suggestions complexes, j'ai trouvé qu'un ensemble de ArrayLists constituait une solution élégante pour représenter des ArrayLists associés du même type.

1
Androidcoder

ArrayList<Integer>[] graph = new ArrayList[numCourses]Il fonctionne.

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

Je trouve cela plus facile à utiliser ...

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

Tu peux le faire :

// Créer un tableau de type ArrayList

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

// Pour chaque élément du tableau, créez une ArrayList.

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