Je pense que c'est une question assez simple, mais je ne sais pas comment faire cela correctement.
J'ai une arraylist vide:
ArrayList<object> list = new ArrayList<object>();
J'ai des objets que je veux ajouter et chaque objet doit être à une certaine position. Il faut cependant qu'ils puissent être ajoutés dans chaque ordre possible. Quand j'essaye ceci, cela ne fonctionne pas et j'obtiens un IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
Ce que j'ai essayé, c'est de remplir le ArrayList
avec null
, puis de faire ce qui précède. Cela fonctionne, mais je pense que c'est une solution horrible. Y a-t-il une autre façon de faire cela?
Réponses:
Vous pouvez le faire comme ceci:
Après avoir ajouté object2 à la position 2, il déplacera object3 vers la position 3.
Si vous voulez que object3 soit à la position3 tout le temps, je vous suggère d'utiliser un HashMap avec la position comme clé et l'objet comme valeur.
la source
Vous pouvez utiliser un tableau d'objets et le convertir en ArrayList-
ArrayList sera- [1, null, 2, 3, null, null, null, 7, null, null]
la source
Si tel est le cas, pourquoi ne pas envisager d'utiliser un tableau standard, initialiser la capacité et placer les objets à l'index souhaité.
la source
Vous pouvez également remplacer ArrayList pour insérer des valeurs nulles entre votre taille et l'élément que vous souhaitez ajouter.
Ensuite, vous pouvez ajouter à tout moment dans ArrayList. Par exemple, cette méthode principale:
renvoie ce résultat de la console:
0: zéro
1 un
2: deux
3: nul
4: nul
5: cinq
la source
J'attire votre attention sur la
ArrayList.add
documentation , qui dit qu'elle jetteIndexOutOfBoundsException
- si l'index est hors de portée (index < 0 || index > size()
)Vérifiez le
size()
de votre liste avant d'appelerlist.add(1, object1)
la source
list.add("element");
Vous devez remplir les index vides avec des valeurs nulles.
la source
en essayant d'ajouter un élément à la position spécifiée, vous avez obtenu IndexOutOfBound, de sorte que la liste doit avoir des éléments à leur position.
Veuillez essayer de suivre
la source
Que diriez-vous de cette petite
while
boucle comme solution?la source
Voici une solution possible:
la source
Je pense que la solution de medopal est ce que vous recherchez.
Mais une autre solution alternative consiste à utiliser un HashMap et à utiliser la clé (Integer) pour stocker les positions.
De cette façon, vous n'aurez pas besoin de le remplir initialement avec des valeurs nulles, etc., collez simplement la position et l'objet dans la carte au fur et à mesure. Vous pouvez écrire quelques lignes à la fin pour le convertir en liste si vous en avez besoin de cette façon.
la source
Supposons que vous souhaitiez ajouter un élément à une position, alors la taille de la liste doit être supérieure à la position.
add(2, item)
: cette syntaxe signifie, déplacer l'ancien élément à la position 2 vers l'index suivant et ajouter l'élément à la 2ème position.S'il n'y a pas d'élément en 2ème position, cela ne fonctionnera pas, cela lancera une exception.
Cela signifie que si vous souhaitez ajouter quelque chose dans
position 2,
la taille de votre liste doit être au moins
(2 + 1) =3,
pour que les articles soient disponibles à0,1,2 Position.
de cette manière, il est garanti que la position 2 est accessible en toute sécurité et il n'y aurait pas d'exception.
la source
Si vous utilisez la saveur Android de Java, puis-je suggérer d'utiliser un SparseArray . C'est un mappage plus efficace en mémoire des entiers aux objets et plus facile à parcourir qu'une mappe
la source
Un peu tard mais j'espère qu'il peut encore être utile à quelqu'un.
2 étapes pour ajouter des éléments à une position spécifique dans un
ArrayList
add
éléments nuls à un index spécifique dans unArrayList
Puis
set
les positions au fur et à mesure des besoins.De cette façon, vous n'avez pas d'éléments redondants dans le
ArrayList
ie si vous deviez ajouter des éléments tels que,Cela n'écraserait pas simplement les éléments existants dans la position, en déplaçant les éléments existants vers la droite par un - vous avez donc une ArrayList avec deux fois plus d'indices.
la source
Vous devez définir au lieu d'ajouter pour remplacer la valeur existante à l'index.
La liste contiendra [objet1, objet2]
la source