"Rishi, aku pancene ngarep-arep sinau babagan metode kelas Array liyane.

"Seneng banget kanggo sinau ora mung nyenengake guru lawas sampeyan! Nanging, yen sampeyan pengin ngerti kabeh, ahli sihir sing apikan jenenge Google bakal mbantu sampeyan rina wengi."

"Uh..."

"Cukup guyon. Jenis. Mesthi, aku bakal nerangake kabeh luwih apik, nanging yen ana apa-apa - elinga tuntunan sing apik. Aku bakal miwiti pelajaran dina iki kanthi Arrays.fillmetode

"Nalika nggarap array, programer Java kerep kudu ngisi array kanthi nilai sing padha. Sampeyan bisa, mesthi, nulis daur ulang lan mung nemtokake sawetara nilai kanggo saben sel array ing daur ulang:

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

"Utawa tinimbang kabeh iki, sampeyan bisa nelpon Arrays.fill()cara, kang nindakake persis padha: ngisi array liwati karo nilai liwati. Mangkene carane katon:

Arrays.fill(name, value)

Lan kode ing conto ing ndhuwur bisa digawe luwih kompak lan luwih cetha:

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

"Apik!"

"Sampeyan uga bisa nggunakake Arrays.fill()cara kanggo ngisi ora kabeh array, nanging bagean saka iku, karo sawetara nilai:

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

"Endi sing pisanan lan pungkasan yaiku indeks sel pisanan lan pungkasan sing bakal diisi.

" Sesuai karo tradisi Jawa sing apik (utawa ala), elinga yen unsur pungkasan ora kalebu ing rentang.

Tuladha:

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

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


String str = Arrays.toString(x);

Kita ngisi sel x[3], x[4], x[5], lan x[6]nilai 999. Sel saka array diwilang saka nol!

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

" Arrays.fill()Cara kasebut mung bisa digunakake karo array siji-dimensi. Yen sampeyan ngliwati array loro-dimensi menyang metode kasebut, bakal dianggep minangka siji-dimensi, kanthi kabeh akibat sing bakal ditindakake.

Arrays.copyOf()

"Amigo, matur nuwun carane ngganti ukuran array sawise digawe?"

"Umm... Kuwi pitakonan trik, ta? Aku dudu wong sing ora duwe pengalaman maneh. Jawaban sing bener yaiku sampeyan ora bisa! Sampeyan ora bisa ngowahi ukuran array sawise digawe."

"Nanging yen sampeyan pancene pengin?"

“Isih mokal!

"Sejatine, yen sampeyan pengin, sampeyan bisa! Kanthi bantuan trik pemrograman:

  1. Pisanan, sampeyan nggawe array anyar saka dawa sing dikarepake
  2. Banjur sampeyan nyalin kabeh unsur saka array pisanan menyang.

"Iki rong perkara sing Arrays.copyOf()ditindakake dening metode kasebut. Iki diarani:

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

"Cara iki ora ngganti array sing wis ana , nanging nggawe array anyar lan nyalin unsur array lawas menyang."

"Apa yen dawane array anyar kurang saka dawane sing wis ana ?

"Pitakonan sing apik, Amigo! Yen unsur-unsur kasebut ora cocog, mula nilai-nilai ekstra ora digatekake."

"Lan yen, sebaliknya, ana sel ekstra, apa nilai awale?

"Yen dawa array anyar luwih gedhe tinimbang dawa lawas, sel kasebut diisi nol.

Tuladha:

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 str2ngandhut nilai Variabel ngandhut nilai
"[1, 2, 3, 4, 5]"

str3
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

Arrays.copyOfRange()

"Lan apa yen sampeyan pengin njaluk Uploaded dawa 5 saka Uploaded dawa 10, nanging sampeyan kudu ngemot pungkasan 5 unsur tinimbang pisanan 5? Ing kasus iki, sampeyan kudu cara liyane saka kelas Arrays. Arrays.copyOfRange(). Iki sing diarani:

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

"Cara iki uga nggawe array anyar, nanging ngisi karo unsur saka panggonan kasepakatan ing array asli. Where pisanan lan pungkasan iku indeks saka unsur pisanan lan pungkasan sing kudu dilebokake ing array anyar. Bisa ngomong apa unsur pungkasan kalebu ing kisaran iki?"

"Ha! Kaya sing diomongake guru agungku, ' sesuai karo tradhisi Jawa sing becik (utawa ala), elinga yen unsur pungkasan ora kalebu ing rentang '."

"Amigo, sampeyan tuwuh ing ngarep mata.

Tuladha:

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 str2ngandhut nilai Variabel ngandhut nilai
"[16, 17, 18, 19, 20]"

str3
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"

Arrays.sort()

"Lan pungkasane, aku ninggalake paling ... mmm ... cara sing nyenengake kanggo pungkasan: ngurutake . Array diurutake cukup kerep ing program. Ing ngisor iki 3 tumindak paling populer nalika nggarap array:

  • Ngurutake larik
  • Nemokake unsur minimal (utawa maksimum) saka array
  • Nemtokake indeks saka unsur ing array (nemokake unsur ing array)

"Algoritma ngurutake kanthi apik, aku kudu ngomong, ora gampang banget kanggo nulis. Luwih tepate, iki minangka tugas standar, lan minangka siswa, sampeyan ora bakal natoni latihan nulis algoritma ngurutake kadhangkala. luwih becik ora mbuwang-mbuwang wektu kanggo nggawe maneh setir. Pencipta Jawa kalebu metode sort()ing Arrayskelas. Iki sing diarani:

Arrays.sort(name);

Cara iki ngurutake array sing dilewati kanthi urutan munggah.

Tuladha:

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

Arrays.sort(x);
String str = Arrays.toString(x);


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

"Apik banget! Aku nelpon mung siji cara lan Uploaded diurutake. A bab kaendahan!"

"Ngomong-ngomong, sampeyan bisa ngurutake ora mung kabeh array, nanging uga mung bagean. Iki sing diarani:

Arrays.sort(name, first, last);

"Endi pisanan lan pungkasan minangka indeks saka sel pisanan lan pungkasan sing kudu didemek.

"Aku wis ngerti apa sing arep sampeyan omongake! 'Sesuai karo tradisi Jawa sing apik (utawa ala), elinga yen unsur pungkasan ora kalebu ing rentang' .

Tuladha:

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

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


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

"Kanggo ngurutake array, Jawa nggunakake algoritma ngurutake paling cepet — QuickSort . Kompleksitas komputasi gumantung saka ukuran array lan diwilang nggunakake rumus N log(N).

"Ngurutake array saka 1000 unsur bakal nglibatake kira-kira 10.000 mbandhingake unsur array. Ngurutake array saka siji yuta unsur bakal melu babagan 20 yuta perbandingan."

" Ora akeh mbandhingake yen sampeyan nimbang jumlah unsur!"

"Iku persis sing dakkandhakake. Algoritma QuickSort efisien banget.

Arrays.binarySearch()

"Inggih, lan pungkasan saka cara paling menarik saka Arrayskelas iku bisa kanggo nelusuri nilai tartamtu ing larik. Iki dudu panelusuran biasa - iku telusuran biner kinasih.

  • Kaping pisanan, array diurutake.
  • Banjur unsur tengah array dibandhingake karo sing kita goleki.
  • Yen unsur luwih gedhe tinimbang unsur tengah, banjur telusuran terus ing sisih tengen array.
  • Yen unsur sing kita goleki kurang saka unsur tengah, mula telusuran diterusake ing sisih kiwa array.

"Amarga Uploaded wis diurutake, iku bisa kanggo ngilangke setengah saka iku ing comparison siji. Banjur ing langkah sabanjure, kita tos metu setengah liyane, lan ing.

"Fantastic! Kita langsung menyang gawang kanthi cepet!"

"Persis. Ing array saka siji yuta (!) unsur, algoritma telusuran binar bisa nemokake indeks saka unsur sing dikarepake mung ing 20 mbandhingake. Kekurangan algoritma yaiku yen array kudu diurutake dhisik, lan ngurutake uga butuh wektu.

Iki sing diarani jenenge:

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

"Endi namejeneng array, sing kudu dilewati wis diurutake (contone, nggunakake metode Arrays.sort()). Lan valueminangka unsur sing digoleki ing array. Asil bali kanthi metode yaiku indeks unsur array sing dikarepake. .

Tuladha:

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);
xpunika
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(indeks 0lan 2uga ditrima)
8
-7

"Apa yen unsur sing dikarepake katon kaping pirang-pirang ing larik ?"

"Iki pitakonan sing bener, Amigo. Ing kasus iki, algoritma bakal ngasilake indeks saka salah siji saka wong-wong mau (ora ana jaminan yen bakal, ngomong, sing pisanan, utawa kosok balene - sing paling pungkasan saka unsur duplikat iki) ."

"Apa yen array ora ngemot unsur sing dikarepake ing kabeh?"

"Ing kasus iki, algoritma bakal ngasilake indeks negatif .

Dokumentasi

"Kabeh wis jelas, Rishi! Iki menarik banget."

"Yen sampeyan pancene nemu iki menarik banget, banjur ing wektu luang skim liwat dokumentasi resmi saka kelas Arrayslan cara ing situs web Oracle .

"Sampeyan bisa njupuk dipikir njlèntrèhaké ing, contone, Arrays.mismatch()lan Arrays.compare()cara. Sampeyan bakal paling kamungkinan kanggo sijine wong kanggo nggunakake apik.

"Lan aja bingung karo jumlah metode. Saben metode duwe 5-10 varian, sing beda-beda mung ing jinis parameter."