Créer un Tableau de Arraylists
Je suis désireux de créer un tableau de liste de tableaux comme ci-dessous:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
Mais ce n'est pas la compilation. Comment puis-je faire cela?
- Ne pas mélanger les tableaux et les collections. En fait, ne pas utiliser des tableaux à moins de traiter avec les primitives (ou vous savez ce que vous faites). Les tableaux sont une convivialité cauchemar, ils font de votre code difficile à maintenir.
- donc, vous devriez éviter de arraylists et les tableaux? (en parlant de types java). Sont les listes de l'alternative?
- une arraylist est une liste qui est soutenue par un tableau. Les listes sont beaux, y compris arraylists.
- Merci. Bon à savoir 🙂
- Pouvez-vous expliquer pourquoi les tableaux sont de la convivialité cauchemar?
- assurez-vous. un tableau ne peut pas se développer, vous ne pouvez pas insérer d'objet dans un tableau, un tableau n'est pas de remplacer les méthodes standard sur un pied d'égalité hashcode ou toString etc.
- ok-je besoin d'exactement quatre arraylists -- j'ai l'intention de faciliter l'accès à chacun par l'indice -- je n'ai pas besoin de l'extérieur de la matrice de l'agrandissement ou la réduction -- je n'ai pas besoin toString ou hashcode, etc. -- pour moi, un tableau est le choix évident ici -- que voulez-vous recommander comme une alternative à cette situation?
- alors susceptibles de tomber dans le "ou vous savez ce que vous faites" de la catégorie. Je ne dis pas que les tableaux ne doivent jamais être utilisés, mais dans 99% des cas d'utilisation, les collections sont le meilleur ajustement. Lire aussi Efficace Java Article 25: Préférez les Listes de Tableaux
- Bon c'est une vieille question, mais je vais demander quand même et voir si quelqu'un a des réponses. Je vois tout le monde parler de pourquoi un tableau de listes est une très mauvaise idée, de mauvaises pratiques de codage, etc. J'ai regardé ce parce que je suis en train d'apprendre à faire les chaînes de hachage, et la définition d'une valeur de hachage de la chaîne est un tableau de listes! Alors, comment exactement une centrale de programmation de la structure de données de terribles pratiques de codage? Ou est-ce que cela tomber dans le IYKWYD catégorie mentionné par @Sean?
- et pourquoi ne pouvez-vous pas utiliser une liste de listes à la place?
- en raison de la façon dont les listes d'éléments sont récupérés par opposition aux tableaux. Un tableau a une adresse directe, ce qui signifie que les éléments[7] est à l'emplacement de la mémoire items[0] + 7*la taille de la mémoire de l'article. C'est un O(1) opération, puis que vous la recherche de la taille relativement petite liste de ce tableau. Une liste est une série de liens à partir d'un élément à l'autre. Si c'est une liste et je dis éléments.get(7) il doit passer par toutes les 7 éléments pour obtenir de la 7ème élément - pas une grosse affaire si c'est seulement 7, mais si c'est l'élément.get(10000) puis c'est tout. C'est un O(n) opérations, ce qui est beaucoup, beaucoup plus lent, si vous êtes travailler avec de grands ensembles de données.
- c'est vrai pour les Listes chaînées, mais une ArrayList est le meilleur des deux mondes: il a l'efficacité de tableaux et la facilité d'utilisation des listes (il y a une petite marge pour le conteneur de liste, mais pas beaucoup)
- Je n'ai pas fait tout cela en place. C'est une structure de base de données que vous allez voir dans quel début de Structures de Données et Algorithmes manuel.
- Je ne dis pas que vous l'avez fait. Je dis que dans CS termes, une ArrayList est plus comme un tableau que comme une liste. La liste est juste une interface, avec des implémentations différentes. Celui-ci utilise des tableaux en interne
- ok, c'est peut-être vrai. Je ne savais pas que sur la liste de tableaux. J'imagine, parce que ça s'appelle une liste j'ai supposé que c'était plus comme une liste. Je vais le chercher.
Vous devez vous connecter pour publier un commentaire.
Comme par Documentation Oracle:
Au lieu de cela, vous pourriez faire:
Comme suggéré par Tom Hawting - tackline, c'est encore mieux de le faire:
List<List<Individual>> group = new ArrayList<List<Individual>>();
serait probablement mieux.ArrayList<String>[] group = new ArrayList[4]
)? Surtout si la vanille tableau de l'API était tout ce qui était nécessaire, de toute façon?List<List<Type>> group = new ArrayList<>();
Comme les autres l'ont mentionné, il est probablement préférable d'utiliser une autre liste pour stocker la liste de tableaux, mais si vous avez à utiliser un tableau:
ArrayList<String>[] group = new ArrayList[4]
)? Quelles bonnes doe s'en fonte faire?new ArrayList<?>[N]
pour éviter à l'aide d'une crue de type.List<Integer>[] subsets=(List<Integer>[])new ArrayList[length]
également fait le travailCela fonctionne:
ArrayList<String>
au lieu deArrayList<NotString>
) àgroup
ne compile pasNote: hello.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
Vous pouvez créer une classe étendant ArrayList
et ensuite créer le tableau
Je suis totalement ne l'obtiennent pas, pourquoi tout le monde est ce qui suggère la genric type sur le tableau en particulier pour cette question.
Que faire si mon besoin est d'indice
n
différents arraylists.De déclarer
List<List<Integer>>
j'ai besoin de créern
ArrayList<Integer>
les objets manuellement, ou mettre une boucle for pour créern
listes ou d'une autre façon, de toute façon, il sera toujours mon devoir de créern
listes.N'est-ce pas formidable si nous le déclarons par moulage comme
List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]
. Je le vois comme un bon design où l'on n'a pas à créer de toutes l'indexation de l'objet (arraylists) par lui-mêmeQuelqu'un peut-il m'éclairer pourquoi ce (arrayform) sera une mauvaise conception et quels sont ses inconvénients?
Vous pouvez créer la Matrice de ArrayList
Que ce sera utile dans de tels scénarios. Vous connaissez la taille de celui de l'extérieur. Mais la taille de ceux de l'intérieur varie. Ici, vous pouvez créer un tableau de longueur fixe qui contient la taille de la variable Tableau liste. Espérons que ce sera utile pour vous.
Dans Java 8 et ci-dessus, vous pouvez le faire dans une bien meilleure façon.
Encore mieux à l'aide de méthode de référence
ArrayList::new
, il va appelerArrayList(int)
constructeur avec le courant de l'indice de l'argument - ArrayList(1), ArrayList(2), ArrayList(3) etc. Donc, vous allez vous retrouver avec soit sous-dimensionné ou plus de la taille des tableaux, selon votre utilisation. Je voudrais décourager de l'utiliser et préfèrent la deuxième approche où vous appelez le constructeur vous-même dans votre expression lambda.Le problème avec cette situation est à l'aide d'un arraylist vous obtenir un temps de complexité de o(n) pour les ajouter à une position spécifique. Si vous utilisez un tableau de créer un emplacement de mémoire en déclarant votre tableau par conséquent, il est constant
Cela fonctionne, un tableau de liste de tableaux. Essayer de comprendre comment il fonctionne.
Crédits à Kelvincer pour certains codes.
Vous ne pouvez pas créer une matrice de type générique. Créer une Liste de ArrayLists :
ou si vous avez VRAIMENT besoin array (AVERTISSEMENT: une mauvaise conception!):
De création et d'initialisation
Accès en écriture
d'accéder à des éléments de ArrayList interne:
Accès en lecture
pour lire l'élément de tableau j'ai comme une liste de tableaux utilisation de la conversion de type:
pour l'élément de tableau i: à lire ArrayList élément à l'indice j
Pour déclarer un tableau de ArrayLists statiquement pour, disons, sprite postes de Points:
dynamiquement:
Malgré les mises en garde et d'autres plus complexes suggestions ici, j'ai trouvé un tableau de ArrayLists être une solution élégante pour représenter liées ArrayLists du même type.
Vous pouvez créer comme ceci
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
Vous avez à créer la matrice de non type générique, puis il la jeta dans une générique.
Liste[] listArr = new ArrayList[4];
Ligne ci-dessus donne l'avertissement , mais il fonctionne (j'.e il crée Tableau de ArrayList)
Je trouve cela plus facile à utiliser...
Vous pouvez faire ceci :
//Créer un Tableau de type ArrayList
//Pour chaque élément de la matrice de faire une liste de tableaux
ArrayList<Integer>[] graph = new ArrayList[numCourses]
Elle fonctionne.
vous pouvez créer une Liste[] et les initialiser en boucle. il compile sans erreurs:
il fonctionne avec arrayList[] l ainsi.
l.length
est pas défini dans la boucle for. Cela peut être une erreur d'exécution.