Le déplacement des éléments autour de dans une ArrayList
Donc je suis encore assez nouveau pour Java et j'ai été jouer avec ArrayList est - ce que je suis en train de réaliser est une méthode pour faire quelque chose comme ceci:
Item 1
Item 2
Item 3
Item 4
Donc j'essaye d'être en mesure de déplacer des éléments dans la liste, sauf s'il est déjà au sommet, auquel cas il va rester la même. Par exemple, si le point 3 a été déplacé, la liste serait:
Item 1
Item 3
Item 2
Item 4
De ma petite compréhension en ce moment alors je voudrais quelque chose le long des lignes de:
IF arrayname index is not equal to 0
THEN move up
ELSE do nothing
La partie, je suis mal, c'est le "déplacer" partie. Des conseils ou des exemples de code de la façon dont cela pourrait être réalisé sont beaucoup apprécié.
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur cette vieille question dans ma recherche d'une réponse, et je pensais que j'allais juste poster la solution que j'ai trouvé dans le cas où quelqu'un d'autre passe par ici à la recherche pour le même.
Pour la permutation de 2 éléments, des Collections.swap est très bien. Mais si nous voulons aller de plus d'éléments, il est une meilleure solution qui implique un usage créatif des Collections.sous-liste et des Collections.pivoter que je n'avais pas pensé jusqu'à ce que j'ai vu il est décrit ici:
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#rotate%28java.util.List,%20int%29
Voici une citation, mais d'y aller et de lire l'ensemble de la chose pour vous-même trop:
greater than or equal (>=)
? qu'en est<=
?Un simple swap est de loin préférable pour "déplacer quelque chose" dans une liste de tableaux:
Parce que une liste de tableaux utilise un tableau, si vous supprimez un élément à partir d'une liste de tableaux, il a de "shift" tous les éléments après que l'élément vers le haut pour combler l'écart dans le tableau. Si vous insérez un élément, il faut mettre tous les éléments après que le point de faire de la place pour l'insérer. Ces changements peuvent devenir très cher, si votre tableau est très grand. Puisque vous savez que vous voulez vous retrouver avec le même nombre d'éléments dans la liste, faire un swap comme ceci permet de "déplacer" un élément à un autre emplacement dans la liste de manière très efficace.
Comme Chris Buckler et Michal Kreuzman point de sortir, il y a même une méthode pratique dans les Collections de la classe afin de réduire ces trois lignes de code à:
if(i > 0)
vous pouvez essayer ce simple code, des Collections.swap(liste, i, j) est ce que vous cherchez.
À déplacer, supprimer et ajouter.
À enlever - Liste de tableaux.supprimer et affecter le retour de l'objet à une variable
Puis ajouter cet objet à l'index -
ArrayList.add(int index, E element)
http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html#add(int, E)
Comme Mikkel posté avant de Collections.tourner est une manière simple. J'utilise cette méthode pour déplacer des éléments haut et vers le bas dans une Liste.
À
Move
élément dans la liste il suffit d'ajouter:À
Swap
deux éléments dans la liste il suffit d'ajouter:L'application de la récursivité pour changer l'ordre des éléments dans une liste de tableaux
Élément mobile par rapport à l'autre est quelque chose que j'ai besoin d'un lot dans un projet de mine. J'ai donc écrit un petit util classe qui déplace un élément dans une liste à une position par rapport à un autre élément. N'hésitez pas à utiliser (et à les améliorer ;))