Program Tip

배열의 경우 push () 또는 pop ()과 동일합니까?

programtip 2020. 11. 15. 11:40
반응형

배열의 경우 push () 또는 pop ()과 동일합니까?


기본 Java 파일에서 만든 배열에서 항목을 추가, 제거 및 참조하려고하지만 올바른 구문을 파악하는 데 문제가 있습니다. 액션 스크립트에는 배열에서 항목을 추가하고 제거하기 위해 push () 및 pop ()이 있습니다 .Android에 동등한 항목이 있습니까?


배열 목록 사용 http://developer.android.com/reference/java/util/ArrayList.html


Java에서 배열은 고정 된 크기 (초기화 후)를 가지며, 이는 배열에서 항목을 추가하거나 제거 할 수 없음을 의미합니다.

int[] i = new int[10];

위의 스 니펫은 정수 배열의 길이가 10임을 의미합니다. 다음과 같이 참조를 새 배열에 다시 할당하지 않으면 11 번째 정수를 추가 할 수 없습니다.

int[] i = new int[11];

Java에서 패키지 java.util에는 배열과 유사한 컬렉션에서 항목 추가 및 제거를 처리 할 수있는 모든 종류의 데이터 구조가 포함됩니다. 클래식 데이터 구조 스택에는 푸시 및 팝 메소드가 있습니다.


코드를 리팩토링하여 배열을 Collections (예 :)로 대체 할 시간이없는 사람들에게는 ArrayList대안이 있습니다. Collections 와 달리 배열의 길이는 변경할 수 없지만 다음과 같이 배열을 바꿀 수 있습니다.

array = push(array, item);

단점은

  • 푸시 할 때마다 전체 배열을 복사해야합니다.
  • 원래 배열 Object은 변경되지 않으므로 변수를 적절하게 업데이트해야합니다.

에 대한 push방법 은 다음과 같습니다 String.
(에 push대해 String하나,에 대해 하나 int여러 메서드를 만들 수 있습니다. )

private static String[] push(String[] array, String push) {
    String[] longer = new String[array.length + 1];
    for (int i = 0; i < array.length; i++)
        longer[i] = array[i];
    longer[array.length] = push;
    return longer;
}

이 대안은 더 효율적이고 짧으며 읽기 어렵습니다.

private static String[] push(String[] array, String push) {
    String[] longer = new String[array.length + 1];
    System.arraycopy(array, 0, longer, 0, array.length);
    longer[array.length] = push;
    return longer;
}

LinkedList를 사용할 수 있습니다. 그것은 peek, poll 및 offer 방법이 있습니다.


Arrays.copyOf()약간의 반사와 함께 사용 하여 멋진 도우미 기능을 만들 수 있습니다.

public class ArrayHelper {
    public static <T> T[] push(T[] arr, T item) {
        T[] tmp = Arrays.copyOf(arr, arr.length + 1);
        tmp[tmp.length - 1] = item;
        return tmp;
    }

    public static <T> T[] pop(T[] arr) {
        T[] tmp = Arrays.copyOf(arr, arr.length - 1);
        return tmp;
    }
}

용법:

String[] items = new String[]{"a", "b", "c"};

items = ArrayHelper.push(items, "d");
items = ArrayHelper.push(items, "e");

items = ArrayHelper.pop(items);

결과

원본 : a, b, c

푸시 호출 후 배열 : a, b, c, d, e

팝 호출 후 배열 : a, b, c, d

참고 URL : https://stackoverflow.com/questions/4537980/equivalent-to-push-or-pop-for-arrays

반응형