java howto ArrayList push, pop, shift e unshift


89

Ho determinato che Java ArrayList.addè simile a JavaScriptArray.push

Sono bloccato sulla ricerca di ArrayListfunzioni simili alle seguenti

  • Array.pop
  • Array.shift
  • Array.unshift Mi sto avvicinando ArrayList.remove[At]

Risposte:


145

ArrayListè unico nei suoi standard di denominazione. Ecco le equivalenze:

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

Nota che unshiftnon rimuove un elemento, ma ne aggiunge uno all'elenco. Si noti inoltre che è probabile che i comportamenti delle maiuscole / minuscole siano diversi tra Java e JS, poiché ognuno di essi ha i propri standard.


9
Se stai facendo un sacco di "unshifting" ma non molto di ottenere indici medi, potresti trovare ArrayList inferiore a LinkedList in termini di tempi di esecuzione effettivi.
Patrick

mentre (Item item = items.remove (0)) {...} non è equivalente a shift.
e-info128

Di cosa .push?
jameshfisher

1
OP ha detto che sapeva Array.push -> ArrayList.add, e in particolare chiesto pop, shifte unshift. Rileggendolo di nuovo, aggiungerò altre spiegazioni e aggiungerò .pushallo stesso tempo.
Jon Egeland

Anche se non è stata richiesta, questa risposta sembra incompleta senza alcuna menzione della complessità di queste funzioni.
Jasper

25

Qualche tempo fa stavo affrontando questo problema e ho scoperto che java.util.LinkedListè meglio per il mio caso. Ha diversi metodi, con nomi diversi, ma stanno facendo ciò che è necessario:

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

1
Perché questo non è accettato ?! Nota: LinkeListaggiunge metodi che sarebbe molto inefficiente sulla ArrayList alla Listdell'interfaccia, questo era quello che mi ha confuso. Questi metodi provengono dalle interfacce Dequee Queueche implementa, ma ArrayListnon lo fa.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 ma quanto inefficiente?
Slava

@Slava O (n) vs O (1) per l'inserto anteriore, che è enorme.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 O (n) e O (1) sono solo complessità. Ho sentito che gli elenchi collegati possono essere molto più lenti degli elenchi di array anche per gli inserimenti / eliminazioni. stackoverflow.com/questions/34170566/… Quindi mi chiedo, che dire di Java?
Slava

15

forse vuoi dare un'occhiata al corso java.util.Stack. ha metodi push e pop. e implementata l'interfaccia List.

per shift / unshift, puoi fare riferimento alla risposta di @ Jon.

tuttavia, qualcosa di ArrayList potrebbe interessarti, arrayList non è sincronizzato. ma Stack lo è. (sottoclasse di Vector). Se hai requisiti thread-safe, Stack potrebbe essere migliore di ArrayList.



Colpa mia, mi sono appena reso conto che nel mio stato di privazione del sonno non ho letto l'ultima metà.
MJ Rayburn

3

Ottima risposta di Jon .

Sono pigro però e odio digitare, quindi ho creato un semplice esempio di taglia e incolla per tutte le altre persone che sono come me. Godere!

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

Sottolineato-java libreria contiene i metodi push (valori), pop (), shift () e unshift (valori).

Esempio di codice:

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"]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.