Tengo una matriz de cadenas ( String[]) y necesito eliminar el primer elemento. ¿Cómo puedo hacer eso de manera eficiente?
Tengo una matriz de cadenas ( String[]) y necesito eliminar el primer elemento. ¿Cómo puedo hacer eso de manera eficiente?
Respuestas:
El tamaño de las matrices en Java no se puede cambiar. Entonces, técnicamente no puede eliminar ningún elemento de la matriz.
Una forma de simular la eliminación de un elemento de la matriz es crear una nueva matriz más pequeña y luego copiar todos los elementos de la matriz original en la nueva matriz más pequeña.
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
Sin embargo , no sugeriría el método anterior. Realmente debería usar un List<String>. Las listas le permiten agregar y eliminar elementos de cualquier índice. Eso se vería similar a lo siguiente:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
ArrayListes O (n).
ArrayList, pero no para LinkedList.
Arrays.copyOfRange()es para API9 +
La forma más sencilla es probablemente la siguiente: básicamente necesita construir una nueva matriz que sea un elemento más pequeña, luego copiar los elementos que desea mantener en las posiciones correctas.
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
Tenga en cuenta que si se encuentra realizando este tipo de operaciones con frecuencia, podría ser una señal de que debería estar utilizando un tipo diferente de estructura de datos, por ejemplo, una lista enlazada. Construir una nueva matriz cada vez es una operación O (n), que podría resultar costosa si su matriz es grande. Una lista enlazada le daría O (1) eliminación del primer elemento.
Una idea alternativa es no eliminar el primer elemento en absoluto, sino simplemente incrementar un número entero que apunte al primer índice que está en uso. Los usuarios de la matriz deberán tener en cuenta esta compensación, pero este puede ser un enfoque eficaz. La clase Java String realmente utiliza este método internamente al crear subcadenas.
Arrays.copyOfRange()es.
No puedes hacerlo en absoluto, y mucho menos rápido. Las matrices en Java son de tamaño fijo. Dos cosas que puedes hacer son:
Puede utilizar System.arraycopypara cualquiera de estos. Ambos son O (n), ya que copian todos menos 1 elemento.
Si va a eliminar el primer elemento con frecuencia, considere usarlo en su LinkedListlugar. Puede utilizar LinkedList.remove, que es de la Queueinterfaz, para su comodidad. Con LinkedList, eliminar el primer elemento es O (1). De hecho, eliminar cualquier elemento es O (1) una vez que tenga una ListIteratorposición en esa posición. Sin embargo, acceder a un elemento arbitrario por índice es O (n).
Un método feo alternativo:
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");