JavaRush /Blog Jawa /Random-JV /Kelas Array lan panggunaane

Kelas Array lan panggunaane

Diterbitake ing grup
Halo maneh! :) Ing wulangan pungkasan, kita kenal karo struktur data kaya array (Java array), sinau carane nggawe array, ngisi data, lan uga sinau carane disimpen ing memori. Dina iki kita bakal nliti sawetara tugas lan conto nggarap array sing bakal kerep ditemokake ing karya nyata. Contone, mbayangno kahanan iki: kita duwe susunan 10 nomer sing ditulis kanthi acak.
//array Java, example
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Tugas kita yaiku ngurutake array iki kanthi urutan munggah: saka sing paling cilik nganti paling gedhe. Ing pungkasan kudu katon kaya iki:
[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
Kepiye carane nindakake iki? Tugase ora sepele, durung nate nglakoni :/ Ada ide? Coba tebak. Punika ingkang saged kita tindakaken, umpamane:
  • Ulangi kabeh unsur array. Bandhingake saben unsur karo sabanjure ( [0]karo [1], [1]karo [2], [2]karo , [3]etc.). Yen unsur array saiki luwih gedhe tinimbang sing sabanjure, kita ngganti lan pindhah menyang unsur sabanjure. Yen ora, tinggalake apa wae lan nerusake.

  • Mangkono, sawise pass pisanan liwat unsur array, nilai paling gedhe (167) dijamin ing sel pungkasan.

  • Saiki ayo pindhah liwat kabeh unsur array maneh, diwiwiti karo unsur indeks [0], nanging nganti unsur penultimate (nomer paling gedhe wis ana ing panggonane) lan nggawe perbandingan lan swap sing padha. 
    Ing pungkasan, ing sel penultimate kita bakal duwe nilai paling dhuwur kaloro (99).

  • Ayo baleni karya iki kaping pirang-pirang amarga ana unsur minus siji ing array.
Kelas array lan panggunaan - 2We teka munggah karo idea, kabeh sing isih kanggo nulis kode. Bakal katon kaya iki:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       for (int i = numbers.length - 1; i > 0; i--) {
           for (int j = 0; j < i; j++) {
           /* Compare the elements in pairs,
             if they are in the wrong order,
             then swap them */
               if (numbers[j] > numbers[j + 1]) {
                   int tmp = numbers[j];
                   numbers[j] = numbers[j + 1];
                   numbers[j + 1] = tmp;
               }
           }
       }

   }
}
Uh... Katon rada rumit -_- Sanajan prinsip umum operasi wis jelas, sampeyan kudu nulis kode sing cukup akeh kanggo ngatasi tugas sing katon prasaja. Oke, mungkin kita mung overestimated awake dhewe? Mbokmenawa, tugas sing kita lakoni iki angel banget kanggo kita nganti saiki. Ayo dadi nyoba kanggo nindakake soko prasaja. Contone, ayo njupuk nomer sing padha.
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Tugas kita yaiku nyalin isine menyang array liyane.
int [] numbersCopy = new int[10];
Pikir babagan carane sampeyan bakal nindakake iki nggunakake kawruh babagan array sing wis sampeyan duwe? Sampeyan bisa, contone, ngubengi larik numberslan nulis unsur siji-siji menyang numbersCopy:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = new int[10];

       for (int i = 0; i < numbers.length; i++) {

           numbersCopy[i] = numbers[i];
       }

   }
}
Inggih, kita wis rampung kurang luwih! Masalah kayane wis ditanggulangi, nanging maneh: yen kudu dieksekusi asring, kode kasebut bakal duwe pirang-pirang puteran sing padha. Ing kasunyatan, iki lan masalah liyane wis dawa wis ditanggulangi dening pangripta Jawa, lan kita ora perlu "reinvent setir" lan nulis sawetara kode kanggo solusi dhewe.

Kelas Aksara Jawa

Kelas Jawa khusus bakal mbantu sampeyan ngatasi masalah khas nalika nggarap array - Arrays. Metode wis ditambahake ing kelas iki kanggo ngatasi masalah sing paling umum sing ditemoni programer Java ing karyane. Contone, tugas ngurutake array, sing kita dhewe nyoba nggawe solusi, bisa ditanggulangi ing siji baris:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       Arrays.sort(numbers);

       System.out.println(Arrays.toString(numbers));

   }
}
Cara Arrays.sort()ngurutake array. Kajaba iku, algoritma sing ana ing njero nggawe luwih efisien tinimbang kode sing kita tulis. Output konsol:

[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
Wigati dimangerteni: kanggo ngowahi array dadi string, kita nggunakake metode kelas liyane Arrays- Arrays.toString(). Array Jawa dhewe ora nimpa toString(). Dadi yen sampeyan mung nulis
System.out.println(numbers.toString());
toString()metode kelas bakal disebut Object. Ing kasus array, output bakal kaya iki:

[I@4554617c
Saiki kita ora bakal njlentrehake babagan kenapa kesimpulan kasebut kaya mangkene; sing utama yaiku iki jelas dudu sing dibutuhake. Nanging Arrays.toString () nindakake apa sing dikarepake. Miturut cara, masalah kita nyalin uga gampang ditanggulangi ing kelas Arrays:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, numbers.length);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Kanggo cara Arrays.copyOf()kita pass array asli kita (saka kang kita kudu nyalin nilai) lan dawa array anyar menyang kang kita nyalin data. Ing kasus iki, kita dituduhake minangka dawa numbers.length, amarga kita pengin nyalin kabeh array. Yen kita pengin nyalin mung sawetara unsur pisanan, kita bisa nemtokake dawa sing luwih cilik kanggo array anyar:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, 4);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Ing kene kita wis nemtokake dawa array anyar dadi 4. Mulane, mung 4 unsur pisanan numberssing bakal disalin menyang array anyar. Output konsol:

[167, -2, 16, 99]
Miturut cara, yen sampeyan kudu nyalin bagean saka array, nanging ora saka wiwitan, nanging "saka tengah," Arrayssampeyan uga bisa nindakake iki:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOfRange(numbers, 2,6);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Kesimpulan:

[16, 99, 26, 92]
Nomer saka sel loro ( kalebu ) nganti enem ( ora kalebu ) disalin menyang array anyar. Kajaba iku, kita bisa uga kudu mbandhingake rong susunan karo saben liyane. Kaya karo metode toString(), array dhewe ora ngganti metode kasebut equals(). Dadi yen kita nyoba mbandhingake kaya iki:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(numbers.equals(numbers2));
   }
}
kita entuk asil false. Object.equals()Sawise kabeh, cara sing mbandhingake pranala bakal diarani . Lan mesthi padha beda! Nanging kita kudu mbandhingake isi array, dudu pranala. Kelas kasebut Arraysngemot metode sing ditindhes equals()sing nindakake apa sing dibutuhake:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(Arrays.equals(numbers, numbers2));
   }
}
Kesimpulan:

true
Miturut cara, kelas Arraysbisa sukses ora mung karo susunan biasa, nanging uga karo rong dimensi:
public class Main {

   public static void main(String[] args) {

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

       int[][] numbersCopy = Arrays.copyOf(numbers, numbers.length);

       System.out.println("Are these two-dimensional arrays equal to each other?");
       System.out.println(Arrays.deepEquals(numbers, numbersCopy));

       System.out.println(Arrays.deepToString(numbersCopy));
   }
}
Kesimpulan:

Равны ли эти двумерные массивы между собой?
true
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Nalika sampeyan bisa ndeleng, cara Arrays.copyOf()coped karo nyalin array loro-dimensi. Wigati dimangerteni manawa ing kasus iki, nalika nyalin array rong dimensi, sing diarani "salinan cethek". Lan kanggo mbandhingake array loro-dimensi lan outputting menyang console, cara khusus kasedhiya - deepEqualslan deepToString(); Ing mangsa ngarep, sampeyan bakal weruh luwih saka sepisan (lan seneng babagan iki) manawa para pangripta Jawa ndeleng akeh kahanan khas sing ditemoni programer nalika nggarap, lan ngetrapake solusi sing wis siap kanggo wong-wong mau ing basa kasebut. Nggunakake solusi iki luwih gampang lan luwih trep tinimbang reinventing gembong, bener? :) Priksa manawa sampeyan maca dokumentasi kelas Arraysing situs web Oracle . Good luck kanggo sinau!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION