Java Howto ArrayList推入,弹出,移位和取消移位


88

我确定JavaArrayList.add与JavaScript类似Array.push

我坚持寻找ArrayList类似于以下内容的功能

  • Array.pop
  • Array.shift
  • Array.unshift 我倾向于 ArrayList.remove[At]

Answers:


142

ArrayList在命名标准方面是独一无二的。这是等效项:

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

请注意,unshift这不会删除元素,而是一个元素添加到列表中。还请注意,Java和JS之间的极端情况行为可能会有所不同,因为它们各自都有自己的标准。


9
如果您要进行很多“不动”的操作,但要达到中间索引的目的不是很多,则可能会发现ArrayList在实际运行时间方面不如LinkedList。
Patrick

while(Item item = items.remove(0)){...}不等同于shift。
e-info128

.push
jameshfisher

1
OP说他知道Array.push -> ArrayList.add,具体问了一下popshiftunshift。再次阅读此内容,我将添加更多说明并同时添加.push
乔恩·埃格兰

即使没有被问到,但在未提及这些功能的复杂性的情况下,这个答案还是不完整的。
贾斯珀(Jasper)

25

前段时间java.util.LinkedList我遇到了这个问题,发现最适合我的情况。它有几种方法,具有不同的名称,但是它们正在执行所需的操作:

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

1
为什么不接受?!注意: 在接口LinkeList上添加了效率很低的方法,这让我感到困惑。此方法来自它实现的和接口,但不是。ArrayListListDequeQueueArrayList
西罗Santilli郝海东冠状病六四事件法轮功

1
@CiroSantilli新疆改造中心六四事件法轮功但是效率低多少?
Slava

@Slava O(n)vs O(1)用于前插入,这是巨大的。
西罗Santilli郝海东冠状病六四事件法轮功

3
@CiroSantilli新疆改造中心六四事件法轮功O(n)和O(1)只是复杂性。我听说,即使是插入/删除操作,链表也可能比数组列表慢得多。stackoverflow.com/questions/34170566/…所以我想知道Java呢?
斯拉瓦

14

也许您想上一java.util.Stack堂课。它具有推,弹出方法。并实现了List接口。

对于换档/不换档,您可以参考@Jon的答案。

但是,您可能要关心ArrayList的某些问题,arrayList同步。但是堆栈是。(Vector的子类)。如果您有线程安全要求,Stack可能比ArrayList更好。



我的糟糕,我只是意识到在睡眠不足的状态下,我没有阅读后半部分。
MJ Rayburn

3

乔恩很好的回答。

虽然我很懒,而且我讨厌打字,所以我为所有其他像我一样的人创建了一个简单的剪切和粘贴示例。请享用!

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

Underscore-java库包含方法push(values),pop(),shift()和unshift(values)。

代码示例:

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"]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.