Comment ajouter de nouveaux éléments à un tableau ?

J'ai le code suivant :

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

Ces deux ajouts ne sont pas compilés. Comment cela pourrait-il fonctionner correctement ?

Solution

La taille d'un tableau ne peut pas être modifiée. Si vous voulez un tableau plus grand, vous devez en instancier un nouveau.

Une meilleure solution serait d'utiliser un [ArrayList][1] qui peut grandir selon vos besoins. La méthode ArrayList.toArray( T[] a ) vous rend votre tableau si vous en avez besoin sous cette forme.

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

Si vous avez besoin de le convertir en un simple tableau...

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

Mais la plupart des choses que vous faites avec un tableau peuvent aussi être faites avec cette ArrayList :

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

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

[1] : http://java.sun.com/javase/7/docs/api/java/util/ArrayList.html

Commentaires (3)

Utilisez une [List][1], comme un [ArrayList][2]. Elle peut croître dynamiquement, contrairement aux tableaux (voir : Effective Java 2e édition, point 25 : Préférer les listes aux tableaux).

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

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

Si vous insistez pour utiliser des tableaux, vous pouvez utiliser [java.util.Arrays.copyOf][3] pour allouer un tableau plus grand pour accueillir l'élément supplémentaire. Ce n'est cependant pas la meilleure solution.

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

C'est O(N) par append. ArrayList, d'un autre côté, a un coût amorti de O(1) par opération.

Voir aussi

Commentaires (1)

Comme l'a dit Tangens, la taille d'un tableau est fixe. Mais vous devez d'abord l'instancier, sinon il ne sera qu'une référence nulle.

String[] where = new String[10];

Ce tableau ne peut contenir que 10 éléments. Vous ne pouvez donc ajouter une valeur que 10 fois. Dans votre code, vous accédez à une référence nulle. C&#8217est pourquoi cela ne fonctionne pas. Afin d'avoir une collection qui croît dynamiquement, utilisez ArrayList.

Commentaires (0)