1.Arrays.fill()

Saat bekerja dengan array, programmer Java sangat sering perlu mengisi array dengan nilai yang sama. Anda dapat, tentu saja, menulis sebuah loop dan hanya menetapkan beberapa nilai ke setiap sel dari array di dalam loop:

int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;

Atau Anda cukup memanggil Arrays.fill()metode, yang melakukan hal yang persis sama: mengisi larik yang diteruskan dengan nilai yang diteruskan. Begini tampilannya:

Arrays.fill(name, value)

Dan kode pada contoh di atas dapat dibuat sedikit lebih ringkas dan jelas:

int[] x = new int[100];
Arrays.fill(x, 999);

Anda juga dapat menggunakan Arrays.fill()metode untuk mengisi bukan seluruh larik, tetapi sebagian darinya, dengan beberapa nilai:

Arrays.fill(name, first, last, value)

Di mana pertama dan terakhir adalah indeks dari sel pertama dan terakhir yang harus diisi.

Sesuai dengan tradisi lama Jawa yang baik, ingatlah bahwa elemen terakhir tidak termasuk dalam jangkauan.

Contoh:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


Kami mengisi sel x[3], x[4], x[5], dan x[6]dengan nilai 999. Sel-sel array diberi nomor mulai dari nol!

Variabel strberisi nilai:
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

Metode ini Arrays.fill()hanya bekerja dengan array satu dimensi. Jika Anda meneruskan larik dua dimensi ke metode, itu akan diperlakukan sebagai satu dimensi, dengan semua konsekuensi berikutnya.



2.Arrays.copyOf()

Seperti yang sudah Anda ketahui, Anda tidak dapat mengubah ukuran array setelah dibuat.

Tetapi bagaimana jika Anda benar-benar menginginkannya?

Nah, jika Anda benar-benar ingin, maka Anda bisa!

  • Buat array baru dengan panjang yang diinginkan
  • Salin semua elemen dari larik pertama ke dalamnya.

Omong-omong, inilah tepatnya yang Arrays.copyOf()dilakukan metode ini. Seperti inilah tampilannya:

Type[] name2 = Arrays.copyOf(name, length);

Metode ini tidak mengubah larik yang ada , melainkan membuat larik baru dan menyalin elemen larik lama ke dalamnya.

Jika elemen tidak sesuai (panjangnya kurang dari panjang array yang ada ), maka nilai ekstra akan diabaikan.

Jika panjang array baru lebih besar dari panjang yang lama, sel diisi dengan nol.

Contoh:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


Variabel str2berisi nilai:
"[1, 2, 3, 4, 5]"

Variabel str3berisi nilai:
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

3.Arrays.copyOfRange()

Dan bagaimana jika Anda ingin mendapatkan larik dengan panjang 5 dari larik dengan panjang 10, tetapi Anda membutuhkannya untuk memuat 5 elemen terakhir daripada 5 elemen pertama?

Dalam hal ini, metode lain dari Arrayskelas akan berguna — Arrays.copyOfRange(). Inilah tampilannya saat kami menyebutnya:

Type[] name2 = Arrays.copyOfRange(name, first, last);

Metode ini juga membuat larik baru, tetapi mengisinya dengan elemen dari sembarang tempat di larik asli. Di mana first dan last adalah indeks dari elemen pertama dan terakhir yang harus dimasukkan ke dalam array baru.

Sesuai dengan tradisi lama Jawa yang baik, ingatlah bahwa elemen terakhir tidak termasuk dalam jangkauan.

Contoh:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


Variabel str2berisi nilai:
"[16, 17, 18, 19, 20]"

Variabel str3berisi nilai:
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


4.Arrays.sort()

Ah, suguhan paling enak: menyortir . Array diurutkan cukup sering dalam pemrograman. Tiga tindakan paling umum saat bekerja dengan array adalah:

  • Menyortir array
  • Menemukan elemen minimum (atau maksimum) dari sebuah array
  • Menentukan indeks elemen dalam array (menemukan elemen dalam array)

Inilah mengapa pencipta Java menyertakan sort()metode di Arrayskelas. Seperti inilah tampilannya:

Arrays.sort(name);

Metode ini mengurutkan array yang diteruskan dalam urutan menaik.

Contoh:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



Variabel strberisi nilai:
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

Luar biasa, bukan? Anda memanggil satu metode, dan sekarang Anda memiliki array yang diurutkan. Cantik.

Omong-omong, Anda dapat menggunakan metode ini untuk mengurutkan tidak hanya seluruh array, tetapi hanya sebagian saja. Seperti inilah tampilannya:

Arrays.sort(name, first, last);

Di mana pertama dan terakhir adalah indeks dari sel pertama dan terakhir yang harus disentuh pengurutan.

Sesuai dengan tradisi lama Jawa yang baik, ingatlah bahwa elemen terakhir tidak termasuk dalam jangkauan.

Contoh:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


Variabel strberisi nilai:
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

Untuk mengurutkan array, Java menggunakan algoritme pengurutan tercepat — QuickSort . Kompleksitas komputasinya bergantung pada ukuran larik dan dihitung menggunakan rumus N log(N).

Menyortir array 1000 elemen akan melibatkan sekitar 3.000 perbandingan elemen array. Menyortir array dari satu juta elemen akan melibatkan sekitar 6 juta perbandingan.



5.Arrays.binarySearch()

Nah, dan yang terakhir dari metode kelas yang paling menarik Arraysadalah dapat mencari nilai yang diberikan dalam sebuah array. Ini bukan pencarian biasa — ini adalah pencarian biner tercinta . Itu bermuara pada ini:

  • Pertama, array diurutkan.
  • Kemudian elemen tengah dari array dibandingkan dengan yang kita cari.
  • Jika elemen lebih besar dari elemen tengah, maka pencarian dilanjutkan di bagian kanan array.
  • Jika elemen yang kita cari kurang dari elemen tengah, maka pencarian dilanjutkan di bagian kiri array.

Karena array diurutkan, dimungkinkan untuk menghilangkan setengahnya dalam satu perbandingan. Kemudian pada langkah selanjutnya, kami membuang setengah lagi, dan seterusnya.

Pendekatan ini membuat pencarian biner sangat cepat. Dalam array satu juta (!) elemen, ia dapat menemukan indeks elemen yang diinginkan hanya dalam 20 perbandingan. Kekurangan pendekatan ini adalah bahwa array harus diurutkan terlebih dahulu, dan pengurutan juga membutuhkan waktu.

Seperti inilah tampilannya:

int index = Arrays.binarySearch(name, value);

Di mana namenama array yang harus dilewati sudah diurutkan (misalnya menggunakan metode Arrays.sort()). Dan valueapakah elemen yang kita cari dalam array. Hasil yang dikembalikan oleh metode adalah indeks dari elemen array yang diinginkan .

Contoh:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
xadalah:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(indeks 0dan 2juga dapat diterima)
8
-7

Jika array berisi beberapa contoh elemen yang dicari, maka algoritme hanya akan mengembalikan indeks salah satunya (tidak ada jaminan bahwa itu akan menjadi, katakanlah, yang pertama, atau sebaliknya - yang terakhir dari ini duplikat elemen)."

Jika elemen tidak ditemukan dalam array, maka indeksnya akan negatif.



6. Tautkan ke dokumentasi Oracle di Arrayskelas

Jika Anda sangat tertarik, Anda dapat membaca semua tentang kelas Arraysdan semua metodenya di dokumentasi resmi a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base /java/util/Arrays.html">di situs web Oracle.

Misalnya, Anda dapat membaca tentang Arrays.mismatch()dan Arrays.compare()metode. Mungkin Anda akan menemukan mereka berguna entah bagaimana.

Dan jangan bingung dengan banyaknya metode. Setiap metode memiliki 5-10 varian, yang hanya berbeda pada tipe parameternya.