219 votes

Comment créer un tableau de listes de tableaux (ArrayLists) ?

Je veux créer un tableau de arrayist comme ci-dessous :

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

Mais il ne compile pas. Comment puis-je faire ?

10 votes

Ne mélangez pas les tableaux et les collections. En fait, n'utilisez pas de tableaux à moins que vous n'ayez affaire à des primitives (ou que vous sachiez ce que vous faites). Les tableaux sont un cauchemar d'utilisation, ils rendent votre code non maintenable.

0 votes

@SeanPatrickFloyd donc il faut éviter les arraylists et les arrays ? (en parlant des types java). Les listes sont-elles l'alternative ?

2 votes

@Keyser une arraylist est une liste qui est soutenue par un tableau. Les listes sont bien, y compris les arraylists.

160voto

MByD Points 78505

Conformément à Documentation Oracle :

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

Au lieu de cela, vous pourriez le faire :

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

Comme le suggère Tom Hawting - tackline, c'est encore mieux à faire :

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

5 votes

Que signifie "cannot create an array of generic type" ? Cela n'a pas vraiment de sens pour moi parce que ce n'est pas un générique si vous fournissez ce qu'il est censé contenir, non ?

0 votes

@Andy Je pense qu'il dit "c'est une limitation de Java que vous ne pouvez pas créer un tableau d'objets génériques", c'est ce qui me semble.

6 votes

Je suis surpris par les votes positifs car il ne répond pas à la question (par exemple, je veux faire ceci, comment puis-je le faire). Sauf peut-être pour la première phrase.

126voto

Marcus Points 5918

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

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

Vous devrez supprimer l'avertissement mais c'est sans danger dans ce cas.

7 votes

Personne ne semble bien expliquer pourquoi et j'aime bien votre extrait ci-dessus. Pourquoi recommandez-vous d'utiliser list plutôt que ceci ?

7 votes

Si le tableau groupe ne change pas, alors cette approche est meilleure, car les tableaux sont plus rapides que les classes List<>.

48 votes

Merci de répondre réellement à la question. Il n'y a aucune raison logique de présumer automatiquement qu'une liste est préférable à un tableau sans autre contexte.

28voto

user2558221 Points 91

Vous pouvez créer une classe étendant ArrayList

class IndividualList extends ArrayList<Individual> {

}

et ensuite créer le tableau

IndividualList[] group = new IndividualList[10];

6voto

user1887360 Points 34

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

0 votes

L'ajout à une position spécifique est O(n) pour les tableaux et les listes de tableaux. Remplir est également O(n) pour les tableaux et les ArrayList.

2 votes

L'ajout à une position spécifique est O(1) pour les tableaux. C'est O(n) pour ArrayList, mais O(1) pour les tableaux.

3voto

Piotr Gwiazda Points 5208

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

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

ou si vous avez VRAIMENT besoin d'un tableau (AVERTISSEMENT : mauvaise conception !):

 ArrayList[] group = new ArrayList[4];

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