8 votes

Type générique pour Arraylist de Arraylists

Dans l'initialisation normale d'une liste de tableaux, Nous avions l'habitude de définir le type générique comme suit,

List list1 = new ArrayList();

Mais dans le cas d'un ArrayList de ArrayLists, comment pouvons-nous définir son type générique?

Le code pour une liste de tableaux de listes de tableaux est le suivant:

ArrayList[] arr=new ArrayList[n];
 for(int i=0;i

`

Partagez simplement la syntaxe, si quelqu'un a une idée..!

`

13voto

Daniel Points 3711

Vous pouvez simplement faire

List> l = new ArrayList>();

Si vous avez besoin d'un tableau de Listes, vous pouvez faire

List[] l = new List[n];

et ignorer ou supprimer en toute sécurité l'avertissement.

5voto

Andreas_D Points 64111

Si vous (vraiment) voulez une liste de listes, alors voici la bonne déclaration :

List> listOfLists = new ArrayList>();

Nous ne pouvons pas créer des tableaux génériques. new List[0] est une erreur de compilation.

0voto

duffymo Points 188155

Quelque chose comme ça :

List> matrice = new ArrayList>();
for (int i = 0; i < numLignes; ++i) {
    List ligne = new ArrayList();
    // ajouter quelques valeurs dans la ligne
    matrice.add(ligne);
}

Vous pouvez choisir n'importe quel type pour la List interne ; ceci est uniquement à des fins illustratives.

0voto

Lycha Points 5493

Vous parlez d'un tableau de listes (ArrayLists pour être plus précis). Java ne permet pas la génération de tableaux génériques (sauf lorsque vous utilisez des wildcards, voir le paragraphe suivant). Vous devriez donc soit oublier l'utilisation de génériques pour le tableau, soit utiliser une liste à la place d'un tableau (de nombreuses solutions sont proposées pour cela).

Citation de l'article IBM:

Une autre conséquence du fait que les tableaux sont covariants mais les génériques ne le sont pas est que vous ne pouvez pas instancier un tableau d'un type générique (new List[3] est illégal), à moins que l'argument de type soit un wildcard non borné (new List< ?>[3] est légal).

0voto

Peter Rader Points 3995

Vous avez raison: Cela semble insensé. (Peut-être un bug...) Au lieu d'utiliser

ArrayList[] lst = new ArrayList[]{};

Utilisez:

ArrayList[] list1 = new ArrayList[]{};

fonctionnera pour la déclaration, même si vous ne spécifiez pas un générique concret!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X