¿Cómo agregar nuevos elementos a una matriz?
Tengo el siguiente código:
String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
Esos dos anexos no se están compilando. ¿Cómo funcionaría eso correctamente?
El tamaño de una matriz no se puede modificar. Si desea una matriz más grande, debe crear una instancia nueva.
Una mejor solución sería utilizar un ArrayList
que pueda crecer según lo necesite. El método ArrayList.toArray( T[] a )
le devuelve su matriz si la necesita de esta forma.
List<String> where = new ArrayList<String>();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );
Si necesita convertirlo a una matriz simple...
String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );
Pero la mayoría de las cosas que haces con una matriz también puedes hacer con esta ArrayList:
// iterate over the array
for( String oneItem : where ) {
...
}
// get specific items
where.get( 1 );
Utilice un List<String>
, como por ejemplo un ArrayList<String>
. Se puede crecer dinámicamente, a diferencia de las matrices (consulte: Java efectivo, segunda edición, elemento 25: Preferir listas a matrices ).
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]"
Si insiste en utilizar matrices, puede utilizarlas java.util.Arrays.copyOf
para asignar una matriz más grande para acomodar el elemento adicional. Sin embargo, esta no es realmente la mejor solución.
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]"
Esto es O(N)
por append
. ArrayList
, por otro lado, tiene O(1)
coste amortizado por operación.
Ver también
- Tutoriales/matrices de Java
- Una matriz es un objeto contenedor que contiene un número fijo de valores de un solo tipo. La longitud de una matriz se establece cuando se crea la matriz. Después de la creación, su longitud es fija.
- Tutoriales de Java/La interfaz de lista