Ich habe string array ( String[]) und muss das erste Element entfernen. Wie kann ich das effizient machen?
Ich habe string array ( String[]) und muss das erste Element entfernen. Wie kann ich das effizient machen?
Antworten:
Die Größe von Arrays in Java kann nicht geändert werden. Technisch gesehen können Sie also keine Elemente aus dem Array entfernen.
Eine Möglichkeit, das Entfernen eines Elements aus dem Array zu simulieren, besteht darin, ein neues, kleineres Array zu erstellen und dann alle Elemente aus dem ursprünglichen Array in das neue, kleinere Array zu kopieren.
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
Allerdings würde ich nicht das obige Verfahren vorschlagen. Sie sollten wirklich eine verwenden List<String>. Mit Listen können Sie Elemente zu jedem Index hinzufügen und daraus entfernen. Das würde ungefähr so aussehen:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
ArrayListO (n) ist.
ArrayList, aber nicht für LinkedList.
Arrays.copyOfRange()ist für API9 +
Der einfachste Weg ist wahrscheinlich der folgende: Sie müssen im Grunde ein neues Array erstellen, das ein Element kleiner ist, und dann die Elemente, die Sie behalten möchten, an die richtigen Positionen kopieren.
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
Beachten Sie, dass wenn Sie diese Art von Operation häufig ausführen, dies ein Zeichen dafür sein kann, dass Sie tatsächlich eine andere Art von Datenstruktur verwenden sollten, z. B. eine verknüpfte Liste. Das Erstellen eines neuen Arrays ist jedes Mal eine O (n) -Operation, die teuer werden kann, wenn Ihr Array groß ist. Eine verknüpfte Liste würde Ihnen O (1) das Entfernen des ersten Elements geben.
Eine alternative Idee besteht darin, das erste Element überhaupt nicht zu entfernen, sondern nur eine Ganzzahl zu erhöhen, die auf den ersten verwendeten Index verweist. Benutzer des Arrays müssen diesen Offset berücksichtigen, dies kann jedoch ein effizienter Ansatz sein. Die Java String-Klasse verwendet diese Methode tatsächlich intern beim Erstellen von Teilzeichenfolgen.
Arrays.copyOfRange()ist.
Sie können es überhaupt nicht tun, geschweige denn schnell. Arrays in Java haben eine feste Größe. Zwei Dinge, die Sie tun könnten, sind:
Sie können System.arraycopyfür beide verwenden. Beide sind O (n), da sie alle bis auf 1 Element kopieren.
Wenn Sie das erste Element häufig entfernen, sollten Sie LinkedListstattdessen verwenden. Sie können das LinkedList.remove, was über die QueueBenutzeroberfläche erfolgt, bequem verwenden. Mit LinkedListist das Entfernen des ersten Elements O (1). In der Tat ist das Entfernen eines Elements O (1), sobald Sie eine ListIteratorPosition erreicht haben. Der Zugriff auf ein beliebiges Element über den Index ist jedoch O (n).
Eine alternative hässliche Methode:
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");