Eu determinei que um Java ArrayList.add
é semelhante a um JavaScriptArray.push
Estou preso em encontrar ArrayList
funções semelhantes às seguintes
Array.pop
Array.shift
Array.unshift
Estou inclinado paraArrayList.remove[At]
Respostas:
ArrayList
é único em seus padrões de nomenclatura. Aqui estão as equivalências:
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
Observe que unshift
não remove um elemento, mas adiciona um à lista. Observe também que os comportamentos de casos secundários provavelmente são diferentes entre Java e JS, já que cada um tem seus próprios padrões.
.push
?
Array.push -> ArrayList.add
, e especificamente perguntou sobre pop
, shift
e unshift
. Lendo isso novamente, vou adicionar mais explicação e adicionar .push
ao mesmo tempo.
Eu estava enfrentando esse problema há algum tempo e descobri que java.util.LinkedList
é o melhor para o meu caso. Tem vários métodos, com nomes diferentes, mas estão fazendo o que é necessário:
push() -> LinkedList.addLast(); // Or just LinkedList.add();
pop() -> LinkedList.pollLast();
shift() -> LinkedList.pollFirst();
unshift() -> LinkedList.addFirst();
LinkeList
adiciona métodos que seria muito ineficiente na ArrayList
à List
interface, isto era o que me confundiu. Esses métodos vêm das interfaces Deque
e Queue
que ele implementa, mas ArrayList
não.
talvez você queira dar uma olhada na java.util.Stack
classe. tem métodos push e pop. e interface de lista implementada.
para shift / unshift, você pode consultar a resposta de @Jon.
no entanto, algo de ArrayList com o qual você pode querer se preocupar, arrayList não está sincronizado. mas Stack é. (subclasse de Vector). Se você tiver um requisito de thread-safe, Stack pode ser melhor do que ArrayList.
Excelente resposta de Jon .
Eu sou preguiçoso e odeio digitar, então criei um exemplo simples de recortar e colar para todas as outras pessoas que são como eu. Apreciar!
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]
}
}
A biblioteca Underscore-java contém os métodos push (valores), pop (), shift () e unshift (valores).
Exemplo de código:
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"]