Comment redimensionner ArrayList
Je viens du C++ fond et je veux avoir une matrice de
ArrayList<arrayList<E>> javamatrix
En C++, je voudrais juste faire
std::vector<std::vector<T> > cppmatrix;
std::vector<T>vcol(cols);
cppmatrix.resize(rows,vcol);
Je n'arrive pas à trouver un construit-dans resize()
fonction pour ArrayLists
pour cette tâche, donc dois-je utiliser une autre collection? N'est pas une façon de faire cela à l'exception de l'aide pour les boucles avec javamatrix.add()
?
P. S je veux qu'il soit initialisé dans le constructeur avec sa taille que de taille pourraient être interrogés avant que j'ai modifier des éléments ou d'ajouter ou de supprimer.
Pourquoi avez-vous besoin de redimensionner? ArrayLists étendre automatiquement en cas de besoin.
Sur une autre note, j'aurais juré que STL vecteurs de redimensionner automatiquement à mesure que vous poussez plus de données sur eux.
Je comprends ce que tu veux dire, mais quand vous rencontrez Réservation Discbased vous devez Spécifier la taille de la matrice d'abord avant de placer l'élément qui besoin de place sur un Index spécifique.
Sur une autre note, j'aurais juré que STL vecteurs de redimensionner automatiquement à mesure que vous poussez plus de données sur eux.
Je comprends ce que tu veux dire, mais quand vous rencontrez Réservation Discbased vous devez Spécifier la taille de la matrice d'abord avant de placer l'élément qui besoin de place sur un Index spécifique.
OriginalL'auteur Ismail Marmoush | 2010-11-13
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de
resize
équivalent qui construit automatiquement et ajoute des éléments. Vous devez le faire vous-même. Cependant,ensureCapacity
est l'équivalent du vecteurreserve
. Il permettra d'assurer que vous avez de la place, mais pas changer la taille réelle.OriginalL'auteur Matthew Flaschen
Vous ne devriez pas avoir besoin de redimensionner arraylists. La taille que vous avez initialement passer en est juste à sa taille de départ. Si vous tentez d'ajouter des éléments au-delà de sa taille actuelle, il sera automatiquement redimensionner.
De la la documentation:
Un autre cas d'utilisation de redimensionnement() la méthode serait si vous souhaitez supprimer tous les éléments au-delà de certains index. Bien sûr, vous pouvez utiliser l'option supprimer() pour le cycle mais resize() est plus pratique et peut être plus optimale.
Redimensionner nécessaires, lorsque vous avez un extensible table de recherche. E. g. vous avez jusqu'à maintenant, les indices jusqu'à 30 et un indice de 250 sort.
OriginalL'auteur Dave McClelland
Surtout, un " resize()' opération n'est pas nécessaire, parce que (a) liste de tableaux de redimensionner automatiquement à mesure que vous ajoutez des éléments, et (b) il est difficile de savoir quelles sont les valeurs que vous stockerez dans l'ArrayList<>, par exemple, 'null', n'est pas très utile. E. g. dans votre cas, vous auriez probablement besoin d'une boucle de toute façon à créer MatrixCell objets.
Pour les lecteurs qui veulent savoir comment redimensionner une liste de tableaux pour en faire petits, il mystifie-moi pourquoi ArrayList a été conçu sans une " resize()' méthode. C'est peut-être parce que les programmeurs débutants sont susceptibles de voir que méthode, puis se rendent pas compte que ArrayList<> auto-redimensionne.
En Java cet idiome œuvres de réduire la taille d'un ArrayList<>:
Cela fonctionne parce que le "sous-liste" renvoie une Liste soutenue par l'original ArrayList<>, donc le " clear()' opère sur l'original " ArrayList<>'.
resize()
. Par exemple, vous voulez un tableau de taillen
et vous voulez être en mesure de l'accès aléatoire de la matrice. Sans la redimensionner pour rendre la taillen
à la première place, vous ne pouvez pas fairearr.get(some_index)
etarr.set(some_index, obj)
.Je suppose que vous êtes en train de penser de matrices creuses, et je suis d'accord, c'est un cas où un "resize ()" serait utile, même si une Carte peut-être mieux si il est vraiment rare. Si vous voulez vraiment toutes les cellules dans le tableau rempli, alors vous aurez besoin de l'initialiser à chaque entrée de certains de référence valide, auquel cas vous avez encore besoin d'une boucle.
vous pouvez également étendre une Collection comme ceci:
collection.addAll(Collections.nCopies(n, defaultElement));
peut-être pas aussi élégant comme une boucle, mais qui fonctionneCooper: De quelle manière est un tableau fragmenté inférieure à une carte? J'ai toujours supposé que un tableau fragmenté était une carte, mais avec un béton natif index au lieu d'un index Entier.
Pas sûr que l'dense et impénétrable "de la liste.sous-liste(n,liste.size()).clear()" l'idiome est vraiment supérieur à ", alors que (la liste.size() > la taille) de la liste.supprimer(liste.size()-1)".
OriginalL'auteur Tim Cooper
Je sais que cette question est très ancienne déjà, mais ce lien peut aider java arraylist ensureCapacity ne fonctionne pas , Le code ajoute de la valeur "Null, afin d'ajuster la taille actuelle.
Au lieu d'utiliser purement ensureCapacity vous pouvez avoir ensureSize
OriginalL'auteur neferpitou