web-dev-qa-db-fra.com

Comment déplacer un élément spécifique dans la liste d'un tableau vers le premier élément

Par exemple: une liste

A B C D E

Étant donné C, Basculer vers 

C A B D E

Notez que la taille du tableau changera, certains éléments peuvent être supprimés dans les temps d'exécution

Collections.swap(url, url.indexOf(itemToMove), 0);

Cette instruction ne fonctionne pas car elle affiche C B A D E et non C A B D E, comment y remédier?

Merci. 

43
user782104

Ce que vous voulez, c'est une opération très coûteuse dans une ArrayList. Cela nécessite de décaler chaque élément entre le début de la liste et l'emplacement de C d'une unité.

Cependant, si vous voulez vraiment le faire:

int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);

S'il s'agit d'une opération fréquente pour vous et que l'accès aléatoire est plutôt moins fréquent, vous pouvez envisager de passer à une autre implémentation List telle que LinkedList. Vous devez également vous demander si une liste est la bonne structure de données si l'ordre des éléments vous préoccupe tellement.

76
Chris Hayes

Faire ceci:

  1. SupprimerL'élément de la liste: ArraylistObj.remove(object);
  2. Ajouterl'élément retour à la listeà une position spécifique: ArrayListObj.add(position, Object);

Selon votre code, utilisez ceci:

url.remove("C");
url.add(0,"C");
11
Venkata Krishna

Le problème est que vous échangez C avec A, donc A B C D E devient C B A D E.

Vous pouvez essayer quelque chose comme ça:

url.remove(itemToMove);
url.add(0, itemToMove);

Ou si url est une LinkedList:

url.remove(itemToMove);
url.addFirst(itemToMove);
4
hbsrud

Une autre solution consiste simplement à permuter de 0 à indexOf(itemToMove).

Ceci est ma version Kotlin:

val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
    Collections.swap(list, 0, it)
}

Désolé, je ne connais pas Java, mais j'ai appris un peu Kotlin. Mais l'algorithme est le même.

2
MYLS

Ce code vous permettra d'augmenter la taille de la liste et d'insérer des éléments sans déranger l'ordre de la liste. 

private void insert(double price){
    for(int i = 0; i < keys.size(); i++){
        if(price > keys.get(i)){
            keys.add(null);
            for(int j = keys.size()-1; j > i; j--){
                Collections.swap(keys, j, j-1);
            }
            keys.add(price);
            Collections.swap(keys, keys.size()-1, i);
            keys.remove(keys.size()-1);
            return;
        }
    }
    keys.add(price);
}
0
sbc

Disons que vous avez un tableau:

String[] arrayOne = new String[]{"A","B","C","D","E"};

Maintenant, vous voulez placer la C à index 0 obtenir le C dans une autre variable

String characterC = arrayOne[2];

Maintenant, lancez la boucle comme suit:

for (int i = (2 - 1); i >= 0; i--) {

            arrayOne[i+1] = arrayOne[i];
        }

Au-dessus de 2 correspond l'index de C. Maintenant, insérez C à l'index par exemple sur 0

arrayOne[0] = characterC;

Le résultat de la boucle ci-dessus sera comme ça:

arrayOne: {"C","A","B","D","E"}

La fin, nous atteignons notre objectif.

0
Zulqarnain