CodeGym /Java Blog /Acak /Membalikkan Array di Jawa
John Squirrels
Level 41
San Francisco

Membalikkan Array di Jawa

Dipublikasikan di grup Acak
Array sering digunakan dalam pengkodean dan merupakan cara menyimpan banyak nilai dengan tipe yang sama dalam satu variabel. Mungkin ada banyak alasan mengapa pembuat kode mungkin ingin membalikkan array. Mungkin diperlukan untuk membalikkan array, misalnya, ketika logika suatu masalah harus dimulai dengan elemen terakhir. Dalam hal ini, praktik terbaik adalah melakukan pembalikan dan kemudian menggunakan larik terbalik jika diperlukan dalam kode. Terlebih lagi, membalikkan array adalah tugas yang sangat populer dalam wawancara Java Juniors.

Cara Membalikkan Array

Ada banyak cara untuk membalikkan larik, dan di sini kami mempertimbangkan 5. Untuk Opsi 1, larik dibalik menggunakan larik tambahan yang diisi dalam urutan menaik dari akhir larik asli (turun), dalam Opsi 2 pembalikan di tempat dilakukan di mana elemen array di awal dan akhir ditukar, di Opsi 3, metode reverse() dari kerangka Collections digunakan untuk melakukan pembalikan, di Opsi 4, List.add() dan List.remove() digunakan, dan terakhir, di Opsi 5, rekursi digunakan.Membalikkan Array di Jawa - 1

Opsi 1: Membalikkan Array menggunakan Array Tambahan

Mari kita menulis sebuah metode sederhana untuk membalikkan array menggunakan array tambahan . Opsi ini menggunakan array tambahan yang diisi mulai dari elemen terakhir dari array asli dalam urutan menurun, yaitu elemen pertama sama dengan elemen terakhir pada array asli, elemen kedua sama dengan elemen kedua dari terakhir dan seterusnya. aktif sampai array tambahan terisi.

import java.util.Arrays;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       int[] array = {7, 8, 9, 10, 11};
       System.out.println("Array : " + Arrays.toString(array)); // print array

       // Call function to get reversed array
       int[] reversedArray = reverse(array);
       System.out.println("Reversed array : " + Arrays.toString(reversedArray)); // print reversed array
   }

   // Method returns a new reversed array, based on the array which was passed to it.
   static int[] reverse(int[] array) {
       int[] newArray = new int[array.length];

       for (int i = 0; i < array.length; i++) {
           newArray[array.length - 1 - i] = array[i];
       }

       return newArray;
   }
}
Dalam contoh ini, kami menulis sebuah metode yang membalik sebuah array dan mengembalikan sebuah array terbalik yang baru, berdasarkan array yang diteruskan ke dalamnya. array dideklarasikan di main dan kemudian metode, reverse , dipanggil. Argumen untuk metode ini adalah array. Dalam metode reverse , sebuah array baru, newArray , dibuat dan berukuran sama dengan array , hanya benar-benar kosong. A for loop digunakan untuk mengisi newArray dan beroperasi di sepanjang array. Hal ini dilakukan dengan memulai dengan elemen pertama dari array dan menugaskannya ke elemen terakhir dari newArray, lalu mengambil elemen kedua dari larik kita dan menugaskannya ke elemen kedua terakhir dari newArray , dan seterusnya; newArray diisi mundur. Ketika for loop selesai, newArray benar-benar penuh dan merupakan kebalikan dari array .
Larik : [7, 8, 9, 10, 11] Larik terbalik : [11, 10, 9, 8, 7]

Opsi 2: Cetak Elemen Array dalam Urutan Terbalik

Untuk opsi membalikkan larik ini, tidak perlu menggunakan larik tambahan, dan tidak diubah menjadi daftar larik. Alih-alih, elemen array dimasukkan ke dalam urutan terbalik di tempat . Ini berarti bahwa mereka sebenarnya ditukar. Elemen pertama ditukar dengan elemen terakhir, elemen kedua ditukar dengan elemen kedua dari terakhir, dan seterusnya. A for loop digunakan dan ketika ini telah selesai, array akan dibalik. Kodenya terlihat seperti ini:

import java.util.Arrays;
/*
reversing an array in-place
*/
public class ReverseArrayDemo {

   public static void main(String[] args) {
       int[] array = {1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       arrayReverse(array);
       System.out.println("Array after reverse : " + Arrays.toString(array));
   }
//arrayReverse is a method that reverses array in-place
   static void arrayReverse(int[] array) {
       for (int i = 0; i < array.length / 2; i++) {
           int temp = array[i];
           array[i] = array[array.length - i - 1];
           array[array.length - i - 1] = temp;
       }
   }
}
Array asli dicetak sebagai String menggunakan Arrays.toString(array) , dan kemudian array kita diteruskan sebagai argumen ke reverse . Dalam metode kebalikan dalam perulangan for , sebuah variabel, temp, dibuat dan digunakan. Dalam for loop, urutan terbalik dicapai dalam tiga langkah:
  1. menugaskan elemen pertama ke temp
  2. menugaskan elemen terakhir ke elemen pertama
  3. menugaskan temp ke elemen terakhir
Ini kemudian dilakukan lagi kali ini untuk elemen kedua dan kedua dari elemen terakhir, dan seterusnya. Ini dilakukan untuk elemen array yang berurutan tetapi loop hanya mengulang hingga setengah ukuran array. Pada dasarnya elemen di ujung array ditukar. Metode ini akan berjalan dua kali lebih cepat dari metode yang menggunakan perulangan for dari 0 ke ukuran. Akibatnya, urutan terbalik dari array tercapai dan kami diperlihatkan cara mencetak array dalam urutan terbalik dan nilainya dicetak:
Susunan sebelum mundur : [1, 4, 9, 16, 25] Susunan sesudah mundur : [25, 16, 9, 4, 1]

Opsi 3: Menggunakan Collections.reverse()

Di Java, metode kebalikannya , yang merupakan bagian dari kerangka Collections yang ada, dapat digunakan untuk membalik sebuah array. Mari kita gunakan untuk melakukan pembalikan.

import java.util.Arrays;
import java.util.Collections;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       Integer[] array = {1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       reverse(array);
       System.out.println("Array after reverse : " + Arrays.toString(array));
   }
//method that reverses an array
   static void reverse(Integer[] array) {
       Collections.reverse(Arrays.asList(array));
   }
}
Di main , array dibuat dan diisi sebagai array Integer dengan 5 angka. Itu kemudian dicetak sebagai daftar menggunakan Arrays.asList(array) dan kemudian fungsi, reverse , dipanggil dan array diteruskan sebagai argumen ke dalam fungsi ini. Sebaliknya , Collections.reverse digunakan, dan ini digunakan pada daftar array, Arrays.asList (array) , daripada array itu sendiri. Kemudian pada langkah selanjutnya kita diperlihatkan cara mencetak array dalam urutan terbalik menggunakan System.out.println , dan kali ini setiap elemen dicetak pada baris yang sama:
Susunan sebelum mundur : [1, 4, 9, 16, 25] Susunan sesudah mundur : [25, 16, 9, 4, 1]

Opsi 4: Balikkan Array menggunakan List.add() dan List.remove()

Dalam opsi baru ini, List.add() dan List.remove() digunakan untuk melakukan pembalikan. Cara kerjanya adalah array diubah menjadi daftar dan elemen terakhir dari daftar dihapus dan diletakkan di awal daftar. Setelah seluruh daftar diulangi, daftar baru adalah pembalikan dari yang asli. Dalam metode main() , sebuah array dibuat terdiri dari 5 angka. Kemudian keadaan asli dari array dikeluarkan ke konsol. Larik ini kemudian dimasukkan sebagai argumen ke metode, reverse() . Metode ini pada dasarnya bekerja dengan menghapus elemen terakhir dan memasukkannya di depan array. Terakhir, status array baru (terbalik) dikeluarkan ke konsol. sebaliknya ()metode, array ditulis ke Daftar melalui Arrays.asList(array) , untuk mengaktifkan metode add() dan remove() untuk melakukan pembalikan. Metode ini pada dasarnya bekerja dengan menghapus elemen terakhir dan memasukkannya di depan array. Langkah-langkah penggunaan reverse() adalah sebagai berikut. Ini menggunakan for loop untuk melakukan pembalikan elemen daftar. Ini dilakukan dengan menginisialisasi variabel i . Awalnya i disetel ke 0. Saat i = 0 , elemen di list.size() - 1 dalam daftar dihapus, dan ini akan selalu menjadi elemen terakhir sejak i < list.size() - 1. Karena metode remove() mengembalikan elemen yang telah dihapusnya, elemen ini sekarang ditambahkan ke daftar pada indeks i = 0 , yaitu disisipkan di awal. Daftar yang tersisa kemudian digeser ke kanan tetapi daftar yang baru masih memiliki jumlah elemen yang sama, yaitu size . Melanjutkan eksekusi for loop dengan nilai berikutnya dari i , i = 1 , rangkaian langkah yang sama dilakukan sehingga elemen terakhir dihapus dan dimasukkan ke dalam num pada i = 1 dan daftar digeser ke kanan. Ini berlanjut hingga nilai inkremental terakhir dari i dan semua elemen dalam daftar telah diubah. Yang kedua untukelemen loop dari daftar dengan indeks i diatur ke elemen array dengan indeks i di mana i dari 0 hingga list.size() - 1 . Untuk meringkas, langkah-langkah yang digunakan adalah: Langkah-langkah:
  1. saya = 0
  2. hapus elemen di list.size() - 1
  3. masukkan elemen, yang ada di list.size() - 1 , di i = 0
  4. kenaikan i
  5. ulangi langkah 2 hingga 4 (dengan nilai baru untuk i pada langkah 3) hingga nilai inkremental i terakhir digunakan

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       Integer[] array = new Integer[]{1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       reverse(array);
       System.out.println("Array after reverse : " + Arrays.toString(array));
   }

   static void reverse(Integer[] array) {
       List list = new ArrayList<>(Arrays.asList(array));

       for (int i = 0; i < list.size() - 1; i++) {
           list.add(i, list.remove(list.size() - 1));
       }

       for (int i = 0; i < list.size(); i++) {
           array[i] = list.get(i);
       }
   }
}
Kode ini memberikan output:
Susunan sebelum mundur : [1, 4, 9, 16, 25] Susunan sesudah mundur : [25, 16, 9, 4, 1]

Opsi 5: Membalikkan Array dengan Rekursi

Metode rekursi digunakan secara luas dalam pengkodean dan dapat digunakan untuk membuat metode yang efisien tentang cara membalikkan array. Dalam opsi ini, array diubah menjadi daftar dan kemudian kode masuk ke metode reverse() setiap kali menghapus elemen terakhir di akhir daftar dan daftar memiliki nilai yang dihapus ditambahkan ke dalamnya dalam urutan terbalik. Seperti pada metode sebelumnya, sebuah array dibuat terdiri dari 5 angka. Ini kemudian diteruskan sebagai argumen ke dalam fungsi, reverse() . Di reverse() hal pertama yang dilakukan adalah mengubah array menjadi daftar dan memeriksa ukuran daftar. Jika hanya memiliki satu elemen atau null maka metode selesai dan kembali. Jika tidak, elemen pertama dihapus, tetapi disalin ke Integer, nilai . Metode reverse() kemudian dipanggil lagi dan rekursi dimulai lagi. Ketika fungsi dimasukkan, langkah yang sama dilakukan, pemeriksaan ukuran di mana, jika daftar lebih besar dari 1, langkah selanjutnya adalah menghapus elemen pertama dan kemudian melakukan rekursi lagi. Ketika ukuran daftar adalah 1, reverse() kembali ke tempat asalnya dan kemudian daftar memiliki setiap nilai yang ditambahkan ke dalamnya untuk membangunnya menjadi kebalikan yang tepat dari daftar asli.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       Integer[] array = new Integer[]{1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       List list = new ArrayList<>(Arrays.asList(array));
       reverse(list);
       System.out.println("Array after reverse : " + Arrays.toString(list.toArray()));
   }

   public static void reverse(List list) {
       if (list== null || list.size() <= 1) {
           return;
       }

       Integer value = list.remove(0);

       reverse(list);

       list.add(value);
   }
}
Outputnya adalah:
Susunan sebelum mundur : [1, 4, 9, 16, 25] Susunan sesudah mundur : [25, 16, 9, 4, 1]

Kesimpulan

Jadi di sini kita telah melihat 5 cara berbeda untuk membalikkan array. Opsi 3, yang menggunakan kerangka Collections, mungkin merupakan metode terbaik untuk digunakan karena Collections.reverse adalah fungsi Java yang sudah ada, dicoba dan diuji. Tentu saja opsi lain dapat digunakan, terutama saat belajar, tetapi umumnya metode standar, jika ada, adalah yang terbaik karena biasanya sangat dioptimalkan dan diuji. Namun, Anda dapat membuat sendiri metode tersebut karena ini adalah latihan pengkodean yang baik dan akan membantu Anda berhasil dalam wawancara untuk Java Junior.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION