Como adicionar novos elementos a uma matriz?
Eu tenho o seguinte código:
String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
Esses dois apêndices não estão a compilar. Como é que isso funcionaria correctamente?
271
3
O tamanho de um array pode't ser modificado. Se você quer um array maior, você tem que instanciar um novo.
Uma solução melhor seria utilizar uma
ArrayList
que pode crescer conforme você precisar. O métodoArrayList.toArray( T[] a )
devolve o seu array se você precisar dele nesta forma.Se precisar de o converter para uma simples matriz...
Mas a maioria das coisas que você faz com um array você pode fazer com esta ArrayList, também:
Utilize uma
List
, como umaArrayList
. It's cresce dinamicamente, ao contrário de arrays (veja: Effective Java 2nd Edition, Item 25: Preferir listas a arrays).Se você insiste em utilizar arrays, você pode utilizar
java.util.Arrays.copyOf
para alocar um array maior para acomodar o elemento adicional. Esta não é realmente a melhor solução, no entanto.Este é o "O(N)
O(N)
porappend'. Já a
ArrayList', temO(1)
custo amortizado por operação.Ver também
Como tangens disse, o tamanho de uma matriz é fixo. Mas você tem que instanciá-lo primeiro, senão ele será apenas uma referência nula.
Esta matriz pode conter apenas 10 elementos. Então você pode anexar um valor apenas 10 vezes. Em seu código você're acessando uma referência nula. Esse'é o porquê de não funcionar. A fim de ter um Coleção de crescimento dinâmico, use a ArrayList.