programing

어레이에 새로운 요소를 추가하는 방법

goodsources 2022. 7. 10. 21:25
반응형

어레이에 새로운 요소를 추가하는 방법

다음 코드가 있습니다.

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)작업당 상각된 비용입니다.

「 」를 참조해 주세요.

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);

요소를 배열에 추가하는 방법은 여러 가지가 있습니다.할 수 .ListArray '어울리지 않다'를 .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

반응형