121

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.pop
  • Array.shift
  • Array.unshift I'm leaning toward ArrayList.remove[At]
0

7 Answers 7

193

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.

Sign up to request clarification or add additional context in comments.

7 Comments

If you're doing a lot of "unshifting" but not a lot of getting at middle indices, you may find ArrayList to be inferior to LinkedList in terms of actual run times.
while(Item item = items.remove(0)){ ... } is not equivalent to shift.
What about .push?
OP said he knew 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.
@Cozzbie that is not true in the case of ArrayList.remove(int index) which the answer references since this overload does return the object removed.
|
35

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();

6 Comments

Why is this not accepted?! Note: 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.
@CiroSantilli新疆改造中心六四事件法轮功 but how much inefficient?
@Slava O(n) vs O(1) for front insert, which is huge.
@CiroSantilli新疆改造中心六四事件法轮功 O(n) and O(1) are just complexities. I heard that linked lists can be quite slower than array lists even for inserts/deletions. stackoverflow.com/questions/34170566/… So I wonder, what about Java?
This is not a solution. a linked list is simply a different data structure with different characteristics. This questions pertains to a contiguous list
|
15

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.

2 Comments

My bad, I just realized that in my sleep deprived state I didn't read the last half.
7

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]

    }

}

Comments

0

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"]

Comments

0

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);
    }
}

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.