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

Lesezeit: 3 Minuten

Zum Beispiel: Eine Liste

ABCDE

Gegeben C , Wechseln zu

CABDE

Beachten Sie, dass sich die Array-Größe ändert, einige Elemente können während der Laufzeit entfernt werden

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

Diese Anweisung funktioniert nicht, weil sie CBADE nicht CABDE ausgibt, wie kann man das beheben?

Vielen Dank.

Benutzer-Avatar
Chris Hayes

Was Sie wollen, ist eine sehr teure Operation in einem ArrayList. Es erfordert das Verschieben jedes Elements zwischen dem Anfang der Liste und der Position von C um eins runter.

Wenn du es aber wirklich machen willst:

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

Wenn dies eine häufige Operation für Sie ist und der wahlfreie Zugriff eher seltener ist, sollten Sie einen Wechsel zu einem anderen in Betracht ziehen List Umsetzung wie z LinkedList. Sie sollten auch überlegen, ob eine Liste überhaupt die richtige Datenstruktur ist, wenn Ihnen die Reihenfolge der Elemente so wichtig ist.

Benutzer-Avatar
Venkata Krishna

Mach das:

  1. Entfernen das Element aus der Liste: ArraylistObj.remove(object);
  2. Hinzufügen das Element der Rücken zur Liste an bestimmter Stelle: ArrayListObj.add(position, Object);

Verwenden Sie gemäß Ihrem Code Folgendes:

url.remove("C");
url.add(0,"C");

  • wird es nicht die Größe der Liste erhöhen?

    – Pankaj Kumar

    25. November 2013 um 7:20 Uhr

  • Entfernen Sie dann das Element aus der Liste mit url.remove(“C”); und füge ein Element an der Nullposition hinzu, indem du url.add(0,”C”) verwendest;

    – Venkata Krishna

    25. November 2013 um 7:21 Uhr

Eine andere Lösung, tauschen Sie einfach weiter aus 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 mit Java nicht vertraut, habe aber ein wenig Kotlin gelernt. Aber der Algorithmus ist derselbe.

Benutzer-Avatar
hbsrud

Das Problem ist, dass Sie C durch A tauschen, also wird ABCDE zu CBAD E.

Du könntest so etwas versuchen:

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

Oder wenn url ist ein LinkedList:

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

Mit diesem Code können Sie die Größe der Liste erhöhen und Elemente einfügen, ohne die Reihenfolge der Liste anderweitig zu stören

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);
}

Benutzer-Avatar
Zulqarnain Mustafa

Angenommen, Sie haben ein Array:

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

Jetzt wollen Sie die platzieren C am Index 0 bekommen das C in einer anderen Variablen

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];
        }

Über 2 ist Index von C. Jetzt einfügen C bei Index zum Beispiel auf 0

arrayOne[0] = characterC;

Das Ergebnis der obigen Schleife sieht so aus:

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

Am Ende erreichen wir unser Ziel.

Benutzer-Avatar
Kunal Kalwar

Kotlin ->

fun <T> MutableList<T>.move(item: T, newIndex: Int)  {
    val currentIndex = indexOf(item)
    if (currentIndex < 0) return
    removeAt(currentIndex)
    add(newIndex, item)
}

1216940cookie-checkSo verschieben Sie ein bestimmtes Element in der Array-Liste zum ersten Element

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy