I've determined that a Java ArrayList.add is similar to a JavaScript Array.push
I'm stuck on finding ArrayList functions similar to the following
Array.popArray.shiftArray.unshiftI'm leaning towardArrayList.remove[At]
ArrayList is unique in its naming standards. Here are the equivalencies:
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
Note that unshift does not remove an element, but instead adds one to the list. Also note that corner-case behaviors are likely to be different between Java and JS, since they each have their own standards.
.push?Array.push -> ArrayList.add, and specifically asked about pop, shift, and unshift. Reading this again, I'm going to add more explanation and add .push at the same time.I was facing with this problem some time ago and I found java.util.LinkedList is best for my case. It has several methods, with different namings, but they're doing what is needed:
push() -> LinkedList.addLast(); // Or just LinkedList.add();
pop() -> LinkedList.pollLast();
shift() -> LinkedList.pollFirst();
unshift() -> LinkedList.addFirst();
LinkeList adds methods which would be very inefficient on ArrayList to the List interface, this was what confused me. This methods come from the Deque and Queue interfaces which it implements, but ArrayList does not.maybe you want to take a look java.util.Stack class.
it has push, pop methods. and implemented List interface.
for shift/unshift, you can reference @Jon's answer.
however, something of ArrayList you may want to care about , arrayList is not synchronized. but Stack is. (sub-class of Vector). If you have thread-safe requirement, Stack may be better than ArrayList.
Great Answer by Jon.
I'm lazy though and I hate typing, so I created a simple cut and paste example for all the other people who are like me. Enjoy!
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]
}
}
Underscore-java library contains methods push(values), pop(), shift() and unshift(values).
Code example:
import com.github.underscore.Underscore:
List<String> strings = Arrays.asList("one", "two", " three");
List<String> newStrings = Underscore.push(strings, "four", "five");
// ["one", " two", "three", " four", "five"]
String newPopString = Underscore.pop(strings).fst();
// " three"
String newShiftString = Underscore.shift(strings).fst();
// "one"
List<String> newUnshiftStrings = Underscore.unshift(strings, "four", "five");
// ["four", " five", "one", " two", "three"]
ArrayDeque examples:
import java.util.ArrayDeque;
public class Example {
public static void main(String[] args) {
ArrayDeque<String> animals = new ArrayDeque<>();
// "unshift" - Add an element at the beginning of the list
animals.addFirst("Cat"); // Adds "Cat" at the front
System.out.println("After unshift: " + animals);
// "push" - Add an element to the end of the list
animals.addLast("Dog"); // Adds "Dog" at the end
System.out.println("After push: " + animals);
// "shift" - Remove the first element from the list
String shiftedAnimal = animals.removeFirst(); // Removes "Cat"
System.out.println("After shift (removed): " + shiftedAnimal);
System.out.println("List after shift: " + animals);
// "pop" - Remove the last element from the list
String poppedAnimal = animals.removeLast(); // Removes "Dog"
System.out.println("After pop (removed): " + poppedAnimal);
System.out.println("List after pop: " + animals);
}
}
Java 21 introduced the SequencedCollection which is also implemented by ArrayList.
Consequently ArrayList now offers the following methods:
addFirst(E) - adds element to start of the list (corresponding to unshift)addLast(E) - adds element to the end of the list (push)removeFirst() - removes and returns the first element (shift)removeLast() - removes and returns the last element (pop)See the documentation of SequencedCollection and ArrayList for details.