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?

12voto

AngeL Punkte 230

Ich habe diesen Code erstellt! Es funktioniert wie ein Charme!

public String[] AddToStringArray(String[] oldArray, String newString)
{
    String[] newArray = Arrays.copyOf(oldArray, oldArray.length+1);
    newArray[oldArray.length] = newString;
    return newArray;
}

Ich hoffe, es gefällt Ihnen!!

10voto

Teocci Punkte 5144

Es gibt viele Möglichkeiten, ein Element zu einem Array hinzuzufügen. Sie können ein temp List um das Element zu verwalten, und konvertieren es dann zurück in Array oder Sie können die java.util.Arrays.copyOf und kombinieren sie mit Generika, um bessere Ergebnisse zu erzielen.

Dieses Beispiel zeigt Ihnen, wie das geht:

public static <T> T[] append2Array(T[] elements, T element)
{
    T[] newArray = Arrays.copyOf(elements, elements.length + 1);
    newArray[elements.length] = element;

    return newArray;
}

Um diese Methode zu verwenden, müssen Sie sie nur wie folgt aufrufen:

String[] numbers = new String[]{"one", "two", "three"};
System.out.println(Arrays.toString(numbers));
numbers = append2Array(numbers, "four");
System.out.println(Arrays.toString(numbers));

Wenn Sie zwei Arrays zusammenführen möchten, können Sie die vorherige Methode wie folgt ändern:

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

Jetzt können Sie die Methode wie folgt aufrufen:

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

Wie ich bereits erwähnt habe, können Sie auch List Objekte. Allerdings ist ein kleiner Hack erforderlich, um sie so sicher zu machen:

public static <T> T[] append2Array(Class<T[]> clazz, List<T> elements, T element)
{
    elements.add(element);
    return clazz.cast(elements.toArray());
}

Jetzt können Sie die Methode wie folgt aufrufen:

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

9voto

Simon Punkte 8997

Wie tangens sagte, ist die Größe eines Arrays festgelegt. Aber Sie müssen es zuerst instanziieren, sonst wird es nur eine Null-Referenz sein.

String[] where = new String[10];

Dieses Feld kann nur 10 Elemente enthalten. Sie können einen Wert also nur 10 Mal anhängen. In deinem Code greifst du auf eine Null-Referenz zu. Deshalb funktioniert es nicht. Um eine dynamisch wachsende Sammlung zu haben, verwenden Sie die ArrayList.

6voto

dforce Punkte 1958
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);
}

6voto

Kris Punkte 583

Hinzufügen neuer Elemente zum String-Array.

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

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