JavaRush /Java Blog /Random-ID /Kelas array dan penggunaannya

Kelas array dan penggunaannya

Dipublikasikan di grup Random-ID
Halo lagi! :) Pada pelajaran terakhir, kita mengenal struktur data seperti array (Java array), mempelajari cara membuat array, mengisinya dengan data, dan juga mempelajari cara menyimpannya dalam memori. Hari ini kita akan melihat beberapa tugas dan contoh bekerja dengan array yang sering Anda temui dalam pekerjaan nyata. Misalnya, bayangkan situasi ini: kita memiliki array 10 angka yang ditulis secara acak.
//array Java, example
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Tugas kita adalah mengurutkan array ini dalam urutan menaik: dari angka terkecil hingga terbesar. Pada akhirnya akan terlihat seperti ini:
[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
Bagaimana kita melakukan ini? Tugasnya tidak sepele, kami belum pernah melakukan ini sebelumnya :/ Ada ide? Mencoba menebak. Inilah yang bisa kita lakukan, misalnya:
  • Iterasi seluruh elemen array. Bandingkan setiap elemen dengan elemen berikutnya ( [0]dengan [1], [1]dengan [2], [2]dengan , [3]dll.). Jika elemen array saat ini lebih besar dari elemen berikutnya, kita menukarnya dan melanjutkan ke elemen berikutnya. Jika tidak, biarkan apa adanya dan lanjutkan.

  • Jadi, setelah melewati elemen array untuk pertama kalinya, nilai terbesar (167) dijamin berada di sel terakhir.

  • Sekarang mari kita ulangi semua elemen array, dimulai dengan elemen dengan indeks [0], tetapi hingga elemen kedua dari belakang (angka terbesar sudah ada di tempatnya) dan buat perbandingan dan pertukaran yang sama. 
    Pada akhirnya, di sel kedua dari belakang kita akan mendapatkan nilai tertinggi kedua (99).

  • Mari ulangi pekerjaan ini sebanyak yang kita punya minus satu elemen dalam array.
Kelas array dan penggunaannya - 2Kami mendapat ide, yang tersisa hanyalah menulis kodenya. Ini akan terlihat seperti ini:
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... Kelihatannya agak rumit -_- Meskipun prinsip umum pengoperasiannya jelas, Anda harus menulis cukup banyak kode untuk menyelesaikan tugas yang tampaknya sederhana tersebut. Oke, mungkin kita hanya melebih-lebihkan diri kita sendiri? Mungkin, tugas yang kami ambil sejauh ini terlalu sulit bagi kami. Mari kita coba melakukan sesuatu yang lebih sederhana. Sebagai contoh, mari kita ambil deretan angka yang sama.
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Tugas kita adalah menyalin isinya ke array lain.
int [] numbersCopy = new int[10];
Pikirkan bagaimana Anda akan melakukan ini dengan menggunakan pengetahuan tentang array yang sudah Anda miliki? Anda dapat, misalnya, mengulang array numbersdan menulis elemen-elemennya satu per satu ke dalam 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];
       }

   }
}
Ya, kurang lebih kita sudah melakukannya! Masalahnya tampaknya telah terpecahkan, tetapi sekali lagi: jika perlu sering dieksekusi, kode tersebut akan memiliki banyak loop yang identik. Faktanya, masalah ini dan masalah lainnya telah lama diselesaikan oleh pencipta Java, dan kita tidak perlu “menemukan kembali roda” dan menulis beberapa kode untuk solusi kita sendiri.

kelas Java Array

Kelas Java khusus akan membantu Anda memecahkan masalah umum saat bekerja dengan array - Arrays. Metode telah ditambahkan ke kelas ini untuk memecahkan masalah paling umum yang dihadapi pemrogram Java dalam pekerjaan mereka. Misalnya, tugas mengurutkan array, yang solusinya kami coba sendiri, dapat diselesaikan dalam satu 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));

   }
}
Metode ini Arrays.sort()mengurutkan array. Apalagi algoritma yang tertanam di dalamnya membuat ini jauh lebih efisien dibandingkan kode yang kami tulis. Keluaran konsol:

[-234, -2, 16, 26, 35, 43, 80, 92, 99, 167]
Harap diperhatikan: untuk mengonversi array menjadi string, kami menggunakan metode kelas lain Arrays- Arrays.toString(). Array Java sendiri tidak menimpa array toString(). Jadi jika Anda hanya menulis
System.out.println(numbers.toString());
toString()metode kelas akan dipanggil Object. Dalam kasus array, outputnya akan seperti ini:

[I@4554617c
Sekarang kita tidak akan membahas secara rinci mengapa kesimpulannya seperti ini; yang utama adalah jelas-jelas bukan ini yang kita butuhkan. Tapi Arrays.toString() melakukan apa yang kami inginkan. Omong-omong, masalah penyalinan kita juga mudah diselesaikan di 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));

   }
}
Ke metode ini Arrays.copyOf()kita meneruskan array asli kita (dari mana kita perlu menyalin nilainya) dan panjang array baru tempat kita menyalin data. Dalam hal ini, kami menunjukkan panjangnya numbers.length, karena kami ingin menyalin seluruh array. Jika kita ingin menyalin beberapa elemen pertama saja, kita dapat menentukan panjang yang lebih kecil untuk array baru:
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));

   }
}
Di sini kita telah menentukan panjang array baru menjadi 4. Oleh karena itu, hanya 4 elemen pertama numbersyang akan disalin ke array baru. Keluaran konsol:

[167, -2, 16, 99]
Omong-omong, jika Anda perlu menyalin bagian dari array, tetapi tidak dari awal, tetapi “dari tengah”, ArraysAnda juga dapat melakukan ini:
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]
Angka-angka dari sel dua ( inklusif ) hingga enam ( tidak inklusif ) disalin ke dalam array baru. Selain itu, kita mungkin perlu membandingkan dua array satu sama lain. Seperti halnya metode toString(), array sendiri tidak mengesampingkan metode tersebut equals(). Jadi kalau kita coba bandingkan seperti ini:
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 mendapatkan hasilnya false. Object.equals()Lagi pula, metode yang membandingkan tautan akan disebut . Dan tentu saja keduanya berbeda! Tapi kita perlu membandingkan isi array, bukan linknya. Kelas Arraysberisi metode yang diganti equals()yang melakukan apa yang kita perlukan:
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
Omong-omong, kelas ini Arraysberhasil bekerja tidak hanya dengan array biasa, tetapi juga dengan array dua 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]]
Seperti yang Anda lihat, metode ini Arrays.copyOf()mengatasi penyalinan array dua dimensi. Harap dicatat bahwa dalam kasus ini, ketika menyalin array dua dimensi, apa yang disebut "penyalinan dangkal" terjadi. Dan untuk membandingkan array dua dimensi dan mengeluarkannya ke konsol, metode khusus disediakan - deepEqualsdan deepToString(); Di masa depan, Anda akan melihat lebih dari sekali (dan bergembira karenanya) bahwa pembuat Java meramalkan banyak situasi umum yang dihadapi pemrogram saat bekerja, dan mengimplementasikan solusi siap pakai untuk mereka dalam bahasa tersebut. Menggunakan solusi ini jauh lebih mudah dan nyaman daripada menciptakan kembali roda, bukan? :) Pastikan untuk membaca dokumentasi kelas Arraysdi situs Oracle . Semoga sukses dengan studimu!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION