Saya memiliki string array ( String[]) dan saya harus menghapus item pertama. Bagaimana saya bisa melakukannya secara efisien?
Saya memiliki string array ( String[]) dan saya harus menghapus item pertama. Bagaimana saya bisa melakukannya secara efisien?
Jawaban:
Ukuran array di Java tidak bisa diubah. Jadi, secara teknis Anda tidak bisa menghapus elemen apa pun dari array.
Salah satu cara untuk mensimulasikan penghapusan elemen dari larik adalah dengan membuat larik baru yang lebih kecil, lalu menyalin semua elemen dari larik asli ke larik baru yang lebih kecil.
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
Namun , saya tidak menyarankan metode di atas. Anda harus benar-benar menggunakan file List<String>. Daftar memungkinkan Anda menambahkan dan menghapus item dari indeks mana pun. Itu akan terlihat seperti berikut ini:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
ArrayListadalah O (n).
ArrayList, tetapi tidak untuk LinkedList.
Arrays.copyOfRange()adalah untuk API9 +
Cara paling sederhana mungkin adalah sebagai berikut - Anda pada dasarnya perlu membuat array baru yang satu elemen lebih kecil, lalu salin elemen yang ingin Anda pertahankan ke posisi yang benar.
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
Perhatikan bahwa jika Anda sering melakukan operasi semacam ini, itu bisa menjadi tanda bahwa Anda seharusnya menggunakan jenis struktur data yang berbeda, misalnya daftar tertaut. Membuat larik baru setiap saat adalah operasi O (n), yang bisa menjadi mahal jika larik Anda besar. Daftar tertaut akan memberi Anda O (1) penghapusan elemen pertama.
Ide alternatif adalah tidak menghapus item pertama sama sekali, tetapi hanya menambah bilangan bulat yang mengarah ke indeks pertama yang digunakan. Pengguna larik perlu memperhitungkan offset ini, tetapi ini bisa menjadi pendekatan yang efisien. Kelas Java String sebenarnya menggunakan metode ini secara internal saat membuat substring.
Arrays.copyOfRange()adalah.
Anda tidak bisa melakukannya sama sekali, apalagi dengan cepat. Array di Jawa berukuran tetap. Dua hal yang dapat Anda lakukan adalah:
Anda dapat menggunakan System.arraycopysalah satu dari ini. Keduanya adalah O (n), karena mereka menyalin semua kecuali 1 elemen.
Jika Anda akan sering membuang elemen pertama, pertimbangkan untuk menggunakannya LinkedList. Anda dapat menggunakan LinkedList.remove, yang dari Queueantarmuka, untuk kenyamanan. Dengan LinkedList, menghapus elemen pertama adalah O (1). Faktanya, menghapus elemen apapun adalah O (1) setelah Anda memiliki ListIteratorposisi tersebut. Namun, mengakses elemen arbitrer dengan indeks adalah O (n).
Metode jelek alternatif:
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");