JavaRush /Java Blog /Random-ID /Rehat kopi #176. Persamaan dan perbedaan Array dan ArrayL...

Rehat kopi #176. Persamaan dan perbedaan Array dan ArrayList. Cara Menulis Metode Equal() yang Efektif

Dipublikasikan di grup Random-ID

Persamaan dan perbedaan Array dan ArrayList

Sumber: Medium Artikel ini berfokus pada pemahaman konsep Array dan ArrayList serta perbedaan di antara keduanya. Rehat kopi #176.  Persamaan dan perbedaan Array dan ArrayList.  Cara menulis metode sama dengan() yang efisien - 1

Array Jawa

Array adalah struktur data yang memungkinkan Anda menyimpan urutan nilai bertipe sama. Misalnya, Anda bisa membuat array karakter, angka, dan sebagainya. Ini berlaku untuk semua tipe primitif dan bahkan objek seperti String . Setelah array dibuat, kita tidak dapat mengubah ukurannya. Berikut adalah contoh umum mendeklarasikan variabel referensi array dan mengalokasikan array:
dataType[] arrayName = new dataType[numElements];
Jika kita mencoba menambahkan lebih dari ukuran array, kita mendapatkan ArrayIndexOutOfBoundsException .

Deklarasi Array

Untuk mendeklarasikan array, gunakan karakter [ ] setelah tipe datanya. Mereka menunjukkan bahwa variabel adalah referensi ke array. Variabel referensi array dapat merujuk ke array dengan berbagai ukuran. Kata kunci new menciptakan ruang di memori untuk menyimpan array dengan jumlah elemen tertentu. Variabel referensi array ditetapkan untuk merujuk ke array yang baru dialokasikan ini. Contoh berikut mendeklarasikan variabel referensi array gameScores , mengalokasikan array yang terdiri dari empat bilangan bulat, dan menugaskan gameScores untuk merujuk ke array yang dialokasikan.
int[] gameScores = new int[4];
Elemen array secara otomatis diinisialisasi ke nilai default ketika Anda menggunakan kata kunci baru untuk menginisialisasi referensi array. Nilai default untuk elemen tipe data integer dan floating-point adalah nol, dan nilai default untuk elemen Boolean adalah false . Anda juga dapat mendeklarasikan variabel referensi array tanpa segera mengalokasikan array, lalu menetapkan variabel tersebut dengan array yang dialokasikan.
int[] gameScores;

gameScores = new int[4];

Menginisialisasi Array dengan Nilai Non-Default

Anda bisa menginisialisasi elemen array dengan nilai non-default dengan menetapkan nilai awal dalam kurung kurawal {} yang dipisahkan dengan koma.
int [] myArray = { 5 , 7 , 11 };
Contoh di atas membuat array yang terdiri dari tiga elemen bilangan bulat dengan nilai 5, 7, dan 11. Inisialisasi array ini tidak memerlukan penggunaan kata kunci new karena ukuran array secara otomatis diatur ke jumlah elemen dalam array. kurung kurawal. Untuk array besar, inisialisasi dapat dilakukan dengan terlebih dahulu mendefinisikan array dan kemudian menggunakan loop untuk menetapkan elemen array. Elemen array dapat diakses menggunakan indeks berbasis nolnya.
Int[ ] intArray = new int [ ] {2};
intArray [0] = 1;
intArray [1] = 2;

Daftar Array

ArrayList adalah daftar elemen tipe referensi yang dapat diubah ukurannya . Ini juga merupakan kelas dari paket java.util milik Java Collection Framework. ArrayList memberi kita array dinamis dan secara otomatis menangani pengubahan ukurannya. Saat Anda menambahkan elemen ke ArrayList, ukuran memorinya secara otomatis bertambah. Anda dapat menggunakan ArrayList menggunakan import java.util.ArrayList; . Kita juga dapat membuat instance ArrayList menggunakan pernyataan berikut:
ArrayList<Type> arrayList = new ArrayList<Type>();
ArrayList dapat bertambah besar ukurannya untuk mengakomodasi elemen yang dibutuhkannya. ArrayList tidak mendukung tipe primitif seperti int , melainkan tipe referensi seperti Integer . Kesalahan umum di kalangan pemula adalah mendeklarasikan ArrayList dengan tipe primitif seperti int , seperti pada ArrayList<int> myVals . Ini menghasilkan kesalahan kompilasi: “tipe tak terduga, ditemukan: int, diperlukan: referensi”. Contoh: Mari kita buat objek ArrayList bernama cars , yang akan menyimpan string:
import java.util.ArrayList;

ArrayList<String> cars = new ArrayList<String>();
Untuk menambahkan elemen ke ArrayList , gunakan metode add() . Untuk mengakses elemen ArrayList , metode get() digunakan .
cars.add("Tesla");
cars.add("BMW");
cars.add("Kia");
cars.get(0);
Perbedaan antara array bawaan dan ArrayList di Java adalah dalam kasus pertama, ukuran array tidak dapat diubah (jika Anda ingin menambah atau menghapus elemen ke/dari array, Anda perlu membuat yang baru) ). Sedangkan pada ArrayList , elemen dapat ditambahkan dan dihapus kapan saja.

Persamaan Antara Array dan ArrayList

  • Array dan ArrayList digunakan untuk menyimpan elemen.
  • Array dan ArrayList dapat menyimpan nilai null.
  • Kedua proses tersebut terjadi dalam waktu yang konstan.
  • Mereka mungkin memiliki nilai duplikat.
  • Array dan ArrayList tidak menjamin keberadaan elemen terurut.

Perbedaan Utama Antara Array dan ArrayList

Perbedaan utama antara array ( Array ) dan ArrayList adalah sifat statis dari array dan sifat dinamis dari ArrayList . Setelah dibuat, Anda tidak dapat mengubah ukuran array, sedangkan ArrayList dapat mengubah ukurannya sesuai kebutuhan. Perbedaan penting lainnya adalah array adalah fungsi dasar yang disediakan oleh Java. Di sisi lain, ArrayList adalah bagian dari kerangka koleksi di Java. Kita dapat mengakses elemen array menggunakan tanda kurung siku di mana kita dapat menentukan indeks. Meskipun ada serangkaian metode untuk mengakses elemen ArrayList dan mengubahnya. Meski berbeda, keduanya tetap sebanding dalam hal lain. Kedua struktur data di Java ini didasarkan pada indeks dan memungkinkan Anda menyimpan objek. Selain itu, mereka mengizinkan nilai nol dan duplikat. Jika Anda mengetahui ukuran objek terlebih dahulu, maka lebih baik menggunakan array. Namun jika Anda tidak yakin dengan ukurannya, sebaiknya gunakan ArrayList saja .

Cara Menulis Metode Equal() yang Efektif

Sumber: Medium Posting ini akan membantu Anda lebih memahami penggunaan metode sama dengan() saat bekerja dengan kode Java. Jika kita berbicara tentang metode sama dengan() default dan tanpa implementasi apa pun, maka dalam banyak hal mirip dengan operasi == . Artinya, metode ini membandingkan objek. Misalnya, sama dengan() membandingkan dua string dan mengembalikan nilai benar jika stringnya sama dan salah jika tidak. Harap dicatat bahwa operator == tidak disarankan untuk membandingkan objek di Java. Alasannya adalah ketika membandingkan objek, == hanya akan mengembalikan nilai true jika referensi menunjuk ke objek yang sama. Cara termudah untuk menghindari masalah adalah dengan tidak mengganti metode sama dengan , dalam hal ini setiap instance kelas hanya sama dengan dirinya sendiri. Anda hanya perlu mengganti sama dengan ketika kelas memiliki konsep persamaan logis yang berbeda dari identitas sederhana objek, dan superkelas belum mengganti persamaan. Jadi, saat menggunakan metode sama dengan() , Anda perlu mencari tahu apakah referensi objek setara secara logis dan apakah referensi tersebut merujuk ke objek yang sama.

Properti dari metode yang sama

Setiap metode yang sama mengimplementasikan hubungan kesetaraan . Ini memiliki properti berikut:
  • Refleksif : Untuk nilai referensi non-null x, x.equals (x) harus mengembalikan true .

  • Simetris : Untuk nilai referensi bukan nolx dan y , x.equals(y) harus mengembalikan true hanya jika y.equals(x) mengembalikan true .

  • Transitif : Untuk nilai referensi bukan nol x , y , z , jika x.equals(y) mengembalikan true dan y.equals(z) mengembalikan true , maka x.equals(z) juga harus mengembalikan true .

  • Konsisten : Untuk nilai referensi non-null x dan y, beberapa panggilan ke x.equals(y) harus secara konsisten mengembalikan true atau secara konsisten mengembalikan false .

  • Non-nullity : Untuk nilai referensi non-null x, x.equals (null) harus mengembalikan false .

Mari kita lihat lebih dekat setiap properti:

Refleksivitas:

Suatu objek harus sama dengan dirinya sendiri. Untuk memverifikasi ini, tambahkan instance kelas Anda ke koleksi. Metode berisi mungkin menunjukkan bahwa koleksi tidak berisi instance yang baru saja Anda tambahkan.

Simetri:

Dua objek (bisa dari kelas berbeda) harus sama satu sama lain.

Selanjutnya:

Jangan menulis metode yang sama yang bergantung pada sumber daya yang tidak dapat diandalkan/mudah berubah.

Bukan nol:

Selalu mengembalikan nilai true jika objek yang diteruskan ke equal adalah null .

Mari kita rangkum:

Berikut resep metode kualitas setara :
  1. Gunakan operator == untuk menguji apakah suatu argumen merupakan referensi ke objek ini.

  2. Gunakan operator instanceof untuk memeriksa apakah suatu argumen memiliki tipe yang benar.

  3. Berikan argumen ke tipe yang benar.

  4. Untuk setiap bidang “penting” di kelas, periksa apakah bidang argumen tersebut cocok dengan bidang yang sesuai dari objek tersebut:

    • Untuk bidang primitif: yang tipenya bukan float atau double , gunakan operator == untuk perbandingan.
    • Untuk bidang referensi objek: panggil metode sama dengan secara rekursif; untuk bidang floating point gunakan metode statis Float.compare(float, float); dan untuk bidang ganda gunakan Double.compare(double, double) .
    • Untuk bidang array: Terapkan panduan ini ke setiap elemen. Jika setiap elemen dalam bidang array penting, gunakan salah satu metode Arrays.equals() .
    • Beberapa bidang referensi objek mungkin berisi nilai null . Untuk menghindari pelemparan NullPointerException , periksa kesetaraan bidang tersebut menggunakan metode statis Objects.equals(Object, Object) .
  5. Ketika Anda selesai menulis metode sama dengan , tanyakan pada diri Anda tiga pertanyaan: Apakah metode tersebut simetris? Apakah itu transitif? Apakah dia konsisten?

Dan ingat, selalu ganti kode hash saat mengganti sama dengan .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION