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 ?
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 ?
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);
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 ?
@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.
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.
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.
Personne ne semble bien expliquer pourquoi et j'aime bien votre extrait ci-dessus. Pourquoi recommandez-vous d'utiliser list plutôt que ceci ?
Si le tableau groupe ne change pas, alors cette approche est meilleure, car les tableaux sont plus rapides que les classes List<>.
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.
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.
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.
0 votes
@SeanPatrickFloyd Merci. C'est bon à savoir :)
18 votes
@SeanPatrickFloyd Pouvez-vous expliquer pourquoi les tableaux sont un cauchemar pour l'utilisateur ?
3 votes
@crucifiedsoul bien sûr. un tableau ne peut pas grandir, vous ne pouvez pas insérer quoi que ce soit dans un tableau, un tableau ne surcharge pas les méthodes standard comme equals hashcode ou toString, etc.
10 votes
@SeanPatrickFloyd ok -- j'ai besoin d'exactement quatre listes de tableaux -- je prévois d'accéder à chacune d'entre elles par index -- je n'ai pas besoin que le tableau extérieur augmente ou diminue -- je n'ai pas besoin de toString ou de hashcode, etc. -- pour moi, un tableau est le choix évident ici -- que recommanderiez-vous comme alternative dans cette situation ?
2 votes
@BrainSlugs83 Eh bien, cela pourrait tomber dans la catégorie "ou vous savez ce que vous faites". Je ne dis pas que les tableaux ne devraient jamais être utilisés, mais dans 99% des cas d'utilisation, les collections sont plus adaptées. Lisez également le point 25 d'Effective Java : Préférer les listes aux tableaux.
4 votes
C'est une vieille question mais je vais quand même la poser et voir si quelqu'un y répond. Je vois que tout le monde parle de la raison pour laquelle un tableau de listes est une idée terrible, une mauvaise pratique de codage, etc. Je me suis renseigné parce que j'apprends à faire des chaînes de hachage, et la méthode définition d'une chaîne de hachage est un tableau de listes ! Alors comment exactement une structure de données de programmation centrale peut-elle être une pratique de codage terrible ? Ou est-ce que cela tombe juste dans la catégorie IYKWYD mentionnée par @Sean ?
0 votes
@jimboweb et pourquoi ne pouvez-vous pas utiliser une liste de listes à la place ?
1 votes
@SeanPatrickFloyd en raison de la manière dont les éléments des listes sont récupérés, contrairement aux tableaux. Un tableau a une adresse directe, ce qui signifie que items[7] se trouve à l'emplacement mémoire items[0] + 7*la taille mémoire de l'élément. C'est une opération O(1), puis vous recherchez la liste relativement petite dans ce tableau. Une liste est une série de liens d'un élément à l'autre. S'il s'agit d'une liste et que je dis items.get(7), il faut parcourir les 7 éléments pour arriver au 7ème élément - ce n'est pas très grave s'il n'y en a que 7, mais si c'est item.get(10000), ça l'est. Il s'agit d'une opération O(n), ce qui est beaucoup, beaucoup plus lent si vous travaillez avec d'énormes ensembles de données.
0 votes
@jimboweb c'est vrai pour les Linked Lists, mais une ArrayList est le meilleur des deux mondes : elle a l'efficacité des tableaux et la facilité d'utilisation des listes (il y a une petite surcharge pour le conteneur de la liste, mais pas beaucoup).
0 votes
@SeanPatrickFloyd Je n'ai pas inventé tout ça. C'est une structure de données de base que vous verrez dans n'importe quel manuel de structures de données et d'algorithmes.
2 votes
@jimboweb Je ne dis pas que vous l'avez fait. Je dis qu'en termes de CS, une ArrayList ressemble plus à un tableau qu'à une liste. La liste est juste une interface, avec différentes implémentations. Celle-ci utilise les tableaux en interne
0 votes
@SeanPatrickFloyd ok, c'est peut-être vrai. Je n'avais pas réalisé cela à propos de ArrayList. Je suppose que parce qu'il est appelé une liste, j'ai supposé que c'était plus comme une liste. Je vais vérifier.