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]
Jacksonkr
quelle

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.

Jon Egeland
quelle
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();
Wirone
quelle
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.

Kent
quelle
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]

    }

}
Adrian Smith
quelle
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"]
Valentyn Kolesnikov
quelle