Hoe voeg ik nieuwe elementen toe aan een array?

Ik heb de volgende code:

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

Die twee appends compileren niet. Hoe zou dat correct werken?

Oplossing

De grootte van een array kan niet worden gewijzigd. Als je een grotere array wilt, moet je een nieuwe array maken.

Een betere oplossing zou zijn om een ArrayList te gebruiken, die kan groeien als je hem nodig hebt. De methode ArrayList.toArray( T[] a ) geeft je je array terug als je hem in deze vorm nodig hebt.

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

Als je het moet omzetten naar een simpele array...

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

Maar de meeste dingen die je met een array doet, kun je ook met deze ArrayList doen:

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

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

Gebruik een List, zoals een ArrayList. Het's dynamisch groeibaar, in tegenstelling tot arrays (zie: Effective Java 2nd Edition, Item 25: Prefer lists to arrays).

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

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

Als je per se arrays wilt gebruiken, kun je java.util.Arrays.copyOf gebruiken om een grotere array toe te wijzen om het extra element te accommoderen. Dit is echter niet de beste oplossing.

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

Dit is O(N) per append. ArrayList, daarentegen, heeft O(1) geamortiseerde kosten per bewerking.

Zie ook

Commentaren (1)

Zoals tangens zei, de grootte van een array is vast. Maar je moet het eerst instantiëren, anders zal het alleen een null reference zijn.

String[] where = new String[10];

Deze array kan maar 10 elementen bevatten. Dus je kan een waarde maar 10 keer appen. In je code heb je toegang tot een null reference. Dat is waarom het niet werkt. Om een dynamisch groeiende verzameling te hebben, gebruik je de ArrayList.

Commentaren (0)