Eu tenho string array ( String[]
) e preciso remover o primeiro item. Como posso fazer isso com eficiência?
Eu tenho string array ( String[]
) e preciso remover o primeiro item. Como posso fazer isso com eficiência?
Respostas:
O tamanho dos arrays em Java não pode ser alterado. Portanto, tecnicamente você não pode remover nenhum elemento do array.
Uma maneira de simular a remoção de um elemento da matriz é criar uma nova matriz menor e, a seguir, copiar todos os elementos da matriz original para a nova matriz menor.
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
No entanto , eu não sugeriria o método acima. Você realmente deveria estar usando um List<String>
. As listas permitem adicionar e remover itens de qualquer índice. Isso seria semelhante ao seguinte:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
ArrayList
é O (n).
ArrayList
, mas não para LinkedList
.
Arrays.copyOfRange()
é para API9 +
A maneira mais simples é provavelmente a seguinte - você basicamente precisa construir um novo array que seja um elemento menor e, em seguida, copiar os elementos que deseja manter nas posições corretas.
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
Observe que, se você se pega fazendo esse tipo de operação com frequência, pode ser um sinal de que deveria estar usando um tipo diferente de estrutura de dados, por exemplo, uma lista vinculada. Construir um novo array toda vez é uma operação O (n), que pode sair caro se o seu array for grande. Uma lista encadeada daria a você O (1) remoção do primeiro elemento.
Uma ideia alternativa é não remover o primeiro item, mas apenas incrementar um número inteiro que aponta para o primeiro índice que está em uso. Os usuários do array precisarão levar esse deslocamento em consideração, mas essa pode ser uma abordagem eficiente. A classe Java String, na verdade, usa esse método internamente ao criar substrings.
Arrays.copyOfRange()
é.
Você não pode fazer nada, muito menos rapidamente. Arrays em Java são de tamanho fixo. Duas coisas que você pode fazer são:
Você pode usar System.arraycopy
para qualquer um deles. Ambos são O (n), uma vez que copiam todos, exceto 1 elemento.
Se você for remover o primeiro elemento com frequência, considere usá-lo LinkedList
. Você pode usar LinkedList.remove
, que é da Queue
interface, por conveniência. Com LinkedList
, a remoção do primeiro elemento é O (1). Na verdade, remover qualquer elemento é O (1), uma vez que você tenha um ListIterator
para essa posição. No entanto, acessar um elemento arbitrário por índice é O (n).
Um método alternativo feio:
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");