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.