자바 하우투 ArrayList 푸시, 팝, 시프트 및 시프트 해제


88

Java ArrayList.add가 JavaScript와 유사하다는 것을 확인했습니다.Array.push

나는 ArrayList다음과 유사한 기능 을 찾는 데 붙어 있습니다.

  • Array.pop
  • Array.shift
  • Array.unshift 나는쪽으로 기울고있다 ArrayList.remove[At]

답변:


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)) {...}는 시프트와 동일하지 않습니다.
e-info128

어때 .push?
jameshfisher

1
영업 이익은 그가 알고 말했다 Array.push -> ArrayList.add, 특히에 대해 질문 pop, shift그리고 unshift. 이 글을 다시 읽으면서 더 많은 설명을 추가 .push하고 동시에 추가 할 것입니다.
존에 겔란 트

질문을받지 않았지만이 답변은 이러한 기능의 복잡성에 대한 언급 없이는 불완전하다고 느낍니다.
Jasper

25

나는 얼마 전에이 문제에 직면했으며 java.util.LinkedList내 경우에 가장 적합 하다는 것을 알았습니다 . 이름이 다른 여러 방법이 있지만 필요한 작업을 수행하고 있습니다.

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

1
왜 이것이 허용되지 않습니까?! 참고 : LinkeList매우 비효율적 방법 추가 ArrayList 받는 사람 List이 나를 혼동 무엇을했다, 인터페이스를. 이 메소드는 구현 하는 DequeQueue인터페이스에서 가져 오지만 ArrayList그렇지 않습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功하지만 얼마나 비효율적입니까?
Slava

@Slava O (n) 대 O (1)은 전면 인서트에 대해 엄청납니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 O (n)과 O (1)은 단지 복잡합니다. 연결 목록은 삽입 / 삭제의 경우에도 배열 목록보다 상당히 느릴 수 있다고 들었습니다. stackoverflow.com/questions/34170566/… 그래서 Java는 어떻습니까?
Slava

14

java.util.Stack클래스 를 듣고 싶을 수도 있습니다 . 푸시, 팝 메소드가 있습니다. 그리고 구현 된 List 인터페이스.

shift / unshift의 경우 @Jon의 답변을 참조 할 수 있습니다.

그러나 ArrayList에 관심을 가질 수 있습니다. arrayList는 동기화 되지 않습니다 . 하지만 스택입니다. (Vector의 하위 클래스). 스레드 안전 요구 사항이있는 경우 Stack이 ArrayList보다 나을 수 있습니다.



안타깝게도 수면 부족 상태에서 마지막 절반을 읽지 않았다는 것을 깨달았습니다.
MJ Rayburn 2015

3

Jon의 훌륭한 답변 입니다.

나는 게으르고 타이핑을 싫어하기 때문에 나와 같은 다른 모든 사람들을 위해 간단한 잘라 내기 및 붙여 넣기 예제를 만들었습니다. 즐겨!

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

밑줄-자바 라이브러리에는 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"]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.