Java Howto ArrayList Push, Pop, Shift und Unshift


87

Ich habe festgestellt, dass ein Java ArrayList.addeinem JavaScript ähnlich istArray.push

Ich bin fest entschlossen, ArrayListFunktionen zu finden, die den folgenden ähnlich sind

  • Array.pop
  • Array.shift
  • Array.unshift Ich neige mich zu ArrayList.remove[At]

Antworten:


139

ArrayListist einzigartig in seinen Namensstandards. Hier sind die Äquivalenzen:

Array.push    -> ArrayList.add(Object o); // Append the list
Array.pop     -> ArrayList.remove(int index); // Remove list[index]
Array.shift   -> ArrayList.remove(0); // Remove first element
Array.unshift -> ArrayList.add(int index, Object o); // Prepend the list

Beachten Sie, dass unshiftnicht nicht entfernt ein Element, sondern fügt man zu der Liste. Beachten Sie auch, dass das Verhalten in Eckfällen zwischen Java und JS wahrscheinlich unterschiedlich ist, da sie jeweils ihre eigenen Standards haben.


9
Wenn Sie viel "Verschieben" tun, aber nicht viel auf mittlere Indizes kommen, ist ArrayList in Bezug auf die tatsächlichen Laufzeiten möglicherweise schlechter als LinkedList.
Patrick

while (Item item = items.remove (0)) {...} entspricht nicht der Verschiebung.
E-Info128

Was ist mit .push?
Jameshfisher

1
OP sagte , er wisse Array.push -> ArrayList.add, und speziell gefragt pop, shiftund unshift. Wenn ich das noch einmal lese, werde ich weitere Erklärungen hinzufügen und gleichzeitig hinzufügen .push.
Jon Egeland

Obwohl es nicht gefragt wurde, fühlt sich diese Antwort unvollständig an, ohne die Komplexität dieser Funktionen zu erwähnen.
Jasper

25

Ich war vor einiger Zeit mit diesem Problem konfrontiert und fand, dass java.util.LinkedListes für meinen Fall am besten ist. Es gibt verschiedene Methoden mit unterschiedlichen Namen, aber sie tun, was benötigt wird:

push()    -> LinkedList.addLast(); // Or just LinkedList.add();
pop()     -> LinkedList.pollLast();
shift()   -> LinkedList.pollFirst();
unshift() -> LinkedList.addFirst();

1
Warum wird das nicht akzeptiert?! Hinweis: LinkeListFügt ArrayList der ListBenutzeroberfläche Methoden hinzu, die sehr ineffizient wären . Das hat mich verwirrt. Diese Methoden kommen von den Dequeund QueueSchnittstellen, die sie implementiert, aber ArrayListnicht.
Ciro Santilli 法轮功 冠状 病 六四 事件 7

1
@CiroSantilli how 改造 中心 六四 六四 法轮功 aber wie viel ineffizient?
Slava

@Slava O (n) vs O (1) für den vorderen Einsatz, der riesig ist.
Ciro Santilli 法轮功 冠状 病 六四 事件 24

2
@CiroSantilli (改造 中心 六四 六四 法轮功 O (n) und O (1) sind nur Komplexitäten. Ich habe gehört, dass verknüpfte Listen selbst beim Einfügen / Löschen ziemlich langsamer sein können als Array-Listen. stackoverflow.com/questions/34170566/… Ich frage mich also, was ist mit Java?
Slava

14

Vielleicht möchten Sie einen Blick auf die java.util.StackKlasse werfen . Es hat Push-Pop-Methoden. und implementierte List-Schnittstelle.

Für Shift / Unshift können Sie auf die Antwort von @ Jon verweisen.

ArrayList ist jedoch nicht synchronisiert. aber Stack ist. (Unterklasse von Vector). Wenn Sie eine thread-sichere Anforderung haben, ist Stack möglicherweise besser als ArrayList.



Mein schlechtes, ich habe gerade gemerkt, dass ich in meinem Schlafentzug die letzte Hälfte nicht gelesen habe.
MJ Rayburn

3

Tolle Antwort von Jon .

Ich bin allerdings faul und ich hasse es zu tippen, also habe ich ein einfaches Beispiel zum Ausschneiden und Einfügen für alle anderen Leute erstellt, die wie ich sind. Genießen!

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        List<String> animals = new ArrayList<>();

        animals.add("Lion");
        animals.add("Tiger");
        animals.add("Cat");
        animals.add("Dog");

        System.out.println(animals); // [Lion, Tiger, Cat, Dog]

        // add() -> push(): Add items to the end of an array
        animals.add("Elephant");
        System.out.println(animals);  // [Lion, Tiger, Cat, Dog, Elephant]

        // remove() -> pop(): Remove an item from the end of an array
        animals.remove(animals.size() - 1);
        System.out.println(animals); // [Lion, Tiger, Cat, Dog]

        // add(0,"xyz") -> unshift(): Add items to the beginning of an array
        animals.add(0, "Penguin");
        System.out.println(animals); // [Penguin, Lion, Tiger, Cat, Dog]

        // remove(0) -> shift(): Remove an item from the beginning of an array
        animals.remove(0);
        System.out.println(animals); // [Lion, Tiger, Cat, Dog]

    }

}

2

Die Unterstreichungs-Java- Bibliothek enthält die Methoden push (Werte), pop (), shift () und unshift (Werte).

Codebeispiel:

import com.github.underscore.U:

List<String> strings = Arrays.asList("one", "two", " three");
List<String> newStrings = U.push(strings, "four", "five");
// ["one", " two", "three", " four", "five"]
String newPopString = U.pop(strings).fst();
// " three"
String newShiftString = U.shift(strings).fst();
// "one"
List<String> newUnshiftStrings = U.unshift(strings, "four", "five");
// ["four", " five", "one", " two", "three"]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.