java - 검색 자바 배열에 새 요소를 추가하는 방법?




8 Answers

ArrayList<String> 과 같은 List<String> 사용하십시오. 배열과 달리 동적으로 확장 가능합니다 ( 효과적인 Java 2 판, 항목 25 : 배열에 대한 목록 선호 ).

import java.util.*;
//....

List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list); // prints "[1, 2, 3]"

배열 사용을 주장하는 경우 java.util.Arrays.copyOf 를 사용하여 더 큰 배열을 할당하여 추가 요소를 수용 할 수 있습니다. 그러나 이것은 실제로 최상의 솔루션은 아닙니다.

static <T> T[] append(T[] arr, T element) {
    final int N = arr.length;
    arr = Arrays.copyOf(arr, N + 1);
    arr[N] = element;
    return arr;
}

String[] arr = { "1", "2", "3" };
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3]"
arr = append(arr, "4");
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3, 4]"

이것은 appendO(N) 입니다. 한편, ArrayList 에는 연산 당 O(1) 상각 된 비용이 있습니다.

또한보십시오

java 배열 치환

다음 코드가 있습니다.

String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");

그 두 개의 추가는 컴파일되지 않습니다. 어떻게 제대로 작동할까요?




Apache Commons Lang이 (가) 있습니다.

T[] t = ArrayUtils.add( initialArray, newitem );

새로운 배열을 반환하지만 어떤 이유로 든 배열을 사용하고 있다면이 작업을 수행하는 이상적인 방법 일 수 있습니다.




String[] source = new String[] { "a", "b", "c", "d" };
String[] destination = new String[source.length + 2];
destination[0] = "/bin/sh";
destination[1] = "-c";
System.arraycopy(source, 0, destination, 2, source.length);

for (String parts : destination) {
  System.out.println(parts);
}



콜렉션리스트를 사용해야합니다. 배열의 치수를 재조정 할 수 없습니다.




String 배열에 새 항목을 추가하는 중입니다.

String[] myArray = new String[] {"x", "y"};

// Convert array to list
List<String> listFromArray = Arrays.asList(myArray);

// Create new list, because, List to Array always returns a fixed-size list backed by the specified array.
List<String> tempList = new ArrayList<String>(listFromArray);
tempList.add("z");

//Convert list back to array
String[] tempArray = new String[tempList.size()];
myArray = tempList.toArray(tempArray);



나는 Java에서 경험이 없지만 배열은 미리 정의 된 크기를 가진 정적 구조라고 항상 들었습니다. ArrayList 또는 Vector 또는 다른 동적 구조를 사용해야합니다.




다음과 같이하면됩니다.

System.arraycopy(initialArray, 0, newArray, 0, initialArray.length);



배열의 크기는 수정할 수 없습니다. 배열을 사용해야하는 경우에는 System.arraycopy (src, srcpos, dest, destpos, length)를 사용할 수 있습니다.




Related