it-swarm.com.de

So verschieben Sie ein bestimmtes Element in der Array-Liste zum ersten Element

Zum Beispiel: Eine Liste

A B C D E

Bei gegebenem C wechseln Sie zu 

C A B D E

Beachten Sie, dass sich die Array-Größe ändert. Einige Elemente werden möglicherweise zu Laufzeit entfernt

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

Diese Anweisung funktioniert nicht, weil sie nicht C A B D E ausgibt. Wie kann sie behoben werden?

Vielen Dank. 

43
user782104

Was Sie wollen, ist eine sehr teure Operation in einer ArrayList. Es ist erforderlich, jedes Element zwischen dem Anfang der Liste und dem Ort von C um 1 zu verschieben.

Wenn Sie es jedoch wirklich tun wollen:

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

Wenn dies ein häufiger Vorgang ist und der wahlfreie Zugriff eher selten ist, können Sie möglicherweise zu einer anderen List-Implementierung wie LinkedList wechseln. Sie sollten auch überlegen, ob eine Liste überhaupt die richtige Datenstruktur ist, wenn Sie sich um die Reihenfolge der Elemente kümmern.

76
Chris Hayes

Mach das:

  1. Remove das Element aus der Liste: ArraylistObj.remove(object);
  2. Add das Element zurück zur Liste an einer bestimmten Position: ArrayListObj.add(position, Object);

Wie in Ihrem Code verwenden Sie Folgendes:

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

Das Problem ist, dass Sie C mit A tauschen, sodass A B C D E zu C B A D E wird.

Sie könnten so etwas versuchen:

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

Oder wenn url eine LinkedList ist:

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

Eine andere Lösung, wechseln Sie einfach von 0 zu indexOf(itemToMove).

Dies ist meine Kotlin-Version:

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

Entschuldigung, ich bin nicht mit Java vertraut, habe aber ein wenig Kotlin gelernt. Der Algorithmus ist jedoch derselbe.

2
MYLS

Mit diesem Code können Sie die Liste vergrößern und Elemente einfügen, ohne die Reihenfolge der Liste zu beeinträchtigen 

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

Angenommen, Sie haben ein Array:

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

Jetzt möchten Sie die C am Index 0 setzen, um die C in einer anderen Variablen abzurufen

String characterC = arrayOne[2];

Führen Sie nun die Schleife wie folgt aus:

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

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

Oben ist 2 der Index von C. Fügen Sie nun C am Index ein, zum Beispiel in 0.

arrayOne[0] = characterC;

Ergebnis der obigen Schleife wird so sein:

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

Am Ende erreichen wir unser Ziel.

0
Zulqarnain