¿Cómo agregar nuevos elementos a una matriz?

Resuelto Pentium10 asked hace 14 años • 20 respuestas

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?

Pentium10 avatar May 16 '10 17:05 Pentium10
Aceptado

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 ArrayListque 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 );
tangens avatar May 16 '2010 10:05 tangens

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.copyOfpara 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
polygenelubricants avatar May 16 '2010 10:05 polygenelubricants