어레이에 새로운 요소를 추가하는 방법
다음 코드가 있습니다.
String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
그 두 추가는 컴파일되지 않았다.그게 어떻게 제대로 작동할까요?
배열 크기를 수정할 수 없습니다.더 큰 어레이를 원하는 경우 새 어레이를 인스턴스화해야 합니다.
더 나은 해결책은 필요에 따라 확장할 수 있는를 사용하는 것입니다.방법ArrayList.toArray( T[] a )
이 폼에서 어레이가 필요한 경우 어레이를 반환할 수 있습니다.
List<String> where = new ArrayList<String>();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );
단순 배열로 변환해야 하는 경우...
String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );
그러나 이 Array List에서도 어레이를 사용하여 수행할 수 있는 대부분의 작업은 다음과 같습니다.
// iterate over the array
for( String oneItem : where ) {
...
}
// get specific items
where.get( 1 );
등의 를 사용합니다.어레이와는 달리 동적으로 확장할 수 있습니다(「Effective Java 2nd Edition, Item 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]"
어레이를 사용해야 하는 경우 를 사용하여 추가 요소를 수용할 수 있도록 더 큰 어레이를 할당할 수 있습니다.하지만 이것은 정말 최선의 해결책은 아닙니다.
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]"
이것은O(N)
에 따라append
.ArrayList
반면에,O(1)
작업당 상각된 비용입니다.
「 」를 참조해 주세요.
- Java 튜토리얼/어레이
- 배열은 단일 유형의 고정 개수의 값을 포함하는 컨테이너 개체입니다.어레이의 길이는 어레이가 생성될 때 설정됩니다.작성 후 길이가 고정됩니다.
- Java 튜토리얼/리스트 인터페이스
Apache Commons Lang에는
T[] t = ArrayUtils.add( initialArray, newitem );
새로운 어레이가 반환되지만 어떤 이유로 어레이를 사용하는 경우에는 이것이 이상적인 방법일 수 있습니다.
여기서 본 적이 없는 "복잡한" 오브젝트나 컬렉션을 포함하지 않는 다른 옵션이 있습니다.
String[] array1 = new String[]{"one", "two"};
String[] array2 = new String[]{"three"};
// declare a new array with enough space for all elements
String[] combinedArray = new String[array1.length + array2.length];
// copy the separate arrays into the combined array
System.arraycopy(array1, 0, combinedArray, 0, array1.length);
System.arraycopy(array2, 0, combinedArray, array1.length, array2.length);
방법이 없다append()
어레이에 배치되어 있습니다.대신 List 객체는 이미 제안했듯이 요소를 동적으로 삽입해야 하는 필요성을 충족시킬 수 있습니다.
List<String> where = new ArrayList<String>();
where.add(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.add(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
어레이를 정말로 사용하고 싶은 경우는, 다음과 같이 하십시오.
String[] where = new String[]{
ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1",
ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1"
};
그러나 이것은 고정된 크기이므로 요소를 추가할 수 없습니다.
내가 만든 암호야!그것은 마법처럼 작동한다!
public String[] AddToStringArray(String[] oldArray, String newString)
{
String[] newArray = Arrays.copyOf(oldArray, oldArray.length+1);
newArray[oldArray.length] = newString;
return newArray;
}
마음에 들었으면 좋겠다!!
tangens가 말했듯이 배열의 크기는 고정되어 있습니다.그러나 먼저 인스턴스화해야 합니다. 그렇지 않으면 null 참조만 됩니다.
String[] where = new String[10];
이 배열은 10개의 요소만 포함할 수 있습니다.따라서 값을 추가할 수 있는 횟수는 10회뿐입니다.코드에서 null 참조에 액세스하고 있습니다.그래서 안 되는 거야동적으로 증가하는 컬렉션을 얻으려면 ArrayList를 사용합니다.
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);
요소를 배열에 추가하는 방법은 여러 가지가 있습니다.할 수 .List
를 Array
'어울리지 않다'를 .java.util.Arrays.copyOf
제네릭스와 조합하여 더 나은 결과를 얻을 수 있습니다.
이 예에서는 다음 방법을 보여 줍니다.
public static <T> T[] append2Array(T[] elements, T element)
{
T[] newArray = Arrays.copyOf(elements, elements.length + 1);
newArray[elements.length] = element;
return newArray;
}
이 방법을 사용하려면 다음과 같이 호출하면 됩니다.
String[] numbers = new String[]{"one", "two", "three"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(numbers, "four");
System.out.println(Arrays.toString(numbers));
두 어레이를 병합하려면 이전 방법을 다음과 같이 수정할 수 있습니다.
public static <T> T[] append2Array(T[] elements, T[] newElements)
{
T[] newArray = Arrays.copyOf(elements, elements.length + newElements.length);
System.arraycopy(newElements, 0, newArray, elements.length, newElements.length);
return newArray;
}
이제 다음과 같이 메서드를 호출할 수 있습니다.
String[] numbers = new String[]{"one", "two", "three"};
String[] moreNumbers = new String[]{"four", "five", "six"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(numbers, moreNumbers);
System.out.println(Arrays.toString(numbers));
말씀드렸듯이,List
하지만이렇게안전하게 합니다.
public static <T> T[] append2Array(Class<T[]> clazz, List<T> elements, T element)
{
elements.add(element);
return clazz.cast(elements.toArray());
}
이제 다음과 같이 메서드를 호출할 수 있습니다.
String[] numbers = new String[]{"one", "two", "three"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(String[].class, Arrays.asList(numbers), "four");
System.out.println(Arrays.toString(numbers));
다음과 같이 데이터를 단순 배열로 저장하려는 경우
String[] where = new String[10];
숫자와 같은 요소를 추가하고 싶다면 문자열 연결보다 훨씬 효율적인 String Builder를 사용하십시오.
StringBuilder phoneNumber = new StringBuilder();
phoneNumber.append("1");
phoneNumber.append("2");
where[0] = phoneNumber.toString();
이 방법은 문자열을 빌드하여 'where' 배열에 저장하는 데 매우 적합합니다.
Java에 대해서는 잘 모르지만 어레이는 크기가 미리 정의된 정적 구조라고 항상 들었습니다.ArrayList, 벡터 또는 기타 동적 구조를 사용해야 합니다.
어레이의 크기를 조정하려면 다음과 같이 하십시오.
String[] arr = {"a", "b", "c"};
System.out.println(Arrays.toString(arr));
// Output is: [a, b, c]
arr = Arrays.copyOf(arr, 10); // new size will be 10 elements
arr[3] = "d";
arr[4] = "e";
arr[5] = "f";
System.out.println(Arrays.toString(arr));
// Output is: [a, b, c, d, e, f, null, null, null, null]
리스트를 하고, 「」를 사용할 수 .Collection.addAll()
을 배열 합니다.
간단하게 다음과 같이 할 수 있습니다.
System.arraycopy(initialArray, 0, newArray, 0, initialArray.length);
어레이 크기를 수정할 수 없습니다.배열을 사용해야 하는 경우 다음을 사용할 수 있습니다.
System.arraycopy(src, srcpos, dest, destpos, length);
충분한 크기의 메모리를 사전에 할당할 수도 있습니다.여기 간단한 스택 구현이 있습니다.프로그램은 3과 5를 출력하도록 되어 있습니다.
class Stk {
static public final int STKSIZ = 256;
public int[] info = new int[STKSIZ];
public int sp = 0; // stack pointer
public void push(int value) {
info[sp++] = value;
}
}
class App {
public static void main(String[] args) {
Stk stk = new Stk();
stk.push(3);
stk.push(5);
System.out.println(stk.info[0]);
System.out.println(stk.info[1]);
}
}
어레이에는 append라는 이름의 함수가 없기 때문에 컴파일되지 않습니다.또한 Array List를 사용하는 것이 올바른 방법입니다.
import java.util.ArrayList;
ArrayList where = new ArrayList<String>();
where.add(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1")
where.add(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1")
언급URL : https://stackoverflow.com/questions/2843366/how-to-add-new-elements-to-an-array
'programing' 카테고리의 다른 글
M 요구에 대한 N초 단위의 슬롯링 방식 호출 (0) | 2022.07.11 |
---|---|
단일 인수(변환 지정자 없음)를 사용하는 printf가 권장되지 않는 이유는 무엇입니까? (0) | 2022.07.10 |
## 및 __LINE__를 사용하여 C 매크로 생성(위치 지정 매크로와의 토큰 연결) (0) | 2022.07.10 |
uint32_t 및 uint16_t 변수' 값을 인쇄하려면 어떻게 해야 합니까? (0) | 2022.07.10 |
변환 후 VueX Getter가 실행되지 않음 (0) | 2022.07.10 |