369 Stimmen

Wie fügt man neue Elemente zu einem Array hinzu?

Ich habe den folgenden Code:

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

Diese beiden Anhänge werden nicht kompiliert. Wie würde das korrekt funktionieren?

474voto

tangens Punkte 37853

Die Größe eines Arrays kann nicht geändert werden. Wenn Sie ein größeres Array wünschen, müssen Sie ein neues Array erstellen.

Eine bessere Lösung wäre die Verwendung eines ArrayList die je nach Bedarf erweitert werden kann. Die Methode ArrayList.toArray( T[] a ) gibt Ihnen Ihr Array zurück, wenn Sie es in dieser Form benötigen.

List<String> where = new ArrayList<String>();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );

Wenn Sie es in ein einfaches Array umwandeln müssen...

String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );

Aber die meisten Dinge, die Sie mit einem Array tun, können Sie auch mit dieser ArrayList tun:

// iterate over the array
for( String oneItem : where ) {
    ...
}

// get specific items
where.get( 1 );

122voto

polygenelubricants Punkte 362173

Verwenden Sie eine List<String> wie zum Beispiel ein ArrayList<String> . Es ist im Gegensatz zu Arrays dynamisch erweiterbar (siehe: Effective Java 2nd Edition, Punkt 25: Listen gegenüber Arrays bevorzugen ).

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]"

Wenn Sie darauf bestehen, Arrays zu verwenden, können Sie java.util.Arrays.copyOf ein größeres Array zuzuweisen, um das zusätzliche Element unterzubringen. Dies ist jedoch nicht wirklich die beste Lösung.

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]"

Dies ist O(N) per append . ArrayList Andererseits hat O(1) amortisierte Kosten pro Vorgang.

Siehe auch

74voto

xenoterracide Punkte 14896

Apache Commons Lang hat

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

gibt es ein neues Array zurück, aber wenn Sie wirklich mit Arrays aus irgendeinem Grund arbeiten, kann dies der ideale Weg sein, um dies zu tun.

43voto

ACLima Punkte 475

Es gibt noch eine andere Möglichkeit, die ich hier noch nicht gesehen habe und die keine "komplexen" Objekte oder Sammlungen beinhaltet.

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

15voto

Robert Punkte 8048

Es gibt keine Methode append() auf Arrays. Stattdessen kann, wie bereits vorgeschlagen, ein List-Objekt den Bedarf für das dynamische Einfügen von Elementen erfüllen, z. B.

List<String> where = new ArrayList<String>();
where.add(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.add(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");

Oder wenn Sie unbedingt ein Array verwenden wollen:

String[] where = new String[]{
    ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1",
    ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1"
};

aber dann ist dies eine feste Größe und es können keine Elemente hinzugefügt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X