Created
January 27, 2020 06:47
-
-
Save AgungPambudi/f58185820ff5bcd7e3c5eccc9d21afc8 to your computer and use it in GitHub Desktop.
Java Collection : Array, LinkedList, Stack, Tree, Vector dan lain-lain.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.agungpambudi.generic; | |
| public class Main { | |
| public static void main(String[] args) { | |
| String[] data = new String[15]; | |
| for (String vararr : data) { | |
| // manipulation of vararr | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ArrayList merupakan struktur data Array yang dapat berkembang kapasitasnya secara otomatis, sehingga berbeda dengan Array biasa yang ukuran Array-nya terbatas saat dideklarasikan. | |
| package com.agungpambudi.generic; | |
| import java.util.ArrayList; | |
| public class Main { | |
| public static void main(String[] args) { | |
| ArrayList<String> list = new ArrayList<String>(); | |
| } | |
| } | |
| /* | |
| kode diatas, berarti kita membuat ArrayList yang digunakan untuk menampung data String. Untuk menambah data yang ada dalam ArrayList, kita dapat menggunakan | |
| metode add(T data) : | |
| ---------------------- | |
| list.add("Data Baru"); | |
| # dan untuk mengubah data yang telah ada dalam ArrayList, kita bisa menggunakan | |
| metode set(int index, T dataBaru): | |
| ------------------------- | |
| list.set(0, "Data Baru"); | |
| # index dalam ArrayList, sama dengan pada Array biasa, dimulai dari 0 dan diakhiri dengan panjangArray -1. | |
| # untuk mendapatkan data yang ada dalam ArrayList, kita dapat menggunakan | |
| metode get(int index): | |
| ------------------------ | |
| String data = list.get(10); | |
| # artinya kita mengambil data pada ArrayList yang ke -11, hal ini dikarenakan index diawali dari 0. | |
| # untuk menghapus data dalam ArrayList, kita dapat menggunakan | |
| metode remove(int index): | |
| ---------------- | |
| list.remove(8); | |
| # sama seperti metode get() dan set(), index pada metode remove() pun diawali dengan index ke -0. | |
| # untuk mendapatkan total data yang ada dalam ArrayList, kita dapat menggunakan | |
| metode size() : | |
| ------------------------ | |
| int total = list.size(); | |
| # kekurangan ArrayList adalah, saat kita menghapus data maka data pada index setelah data yang dihapus, akan diubah indexnya ke index sebelumnya. Misal jika kita memiliki 100 data dalam ArrayList, lalu kita menghapus data index ke 20, maka proses yang terjadi adalah : | |
| # 1. Hapus data ke 21 | |
| # 2. Tempatkan data ke 22 menjadi ke 21 | |
| # 3. Tempatkan data ke 23 menjadi ke 22 | |
| # 4. Tempatkan data ke 24 menjadi ke 23 | |
| # 5. Dan seterusnya hingga data terakhir | |
| # sehinga ArrayList tidak cocok jika digunakan untuk menampung data yang banyak melakukan proses penghapusan data. | |
| */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Java Collection merupakan kumpulan-kumpulan kelas yang digunakan sebagai kelas struktur data, seperti | |
| 1. Array | |
| 2 LinkedList | |
| 3. Stack | |
| 4. Tree dan lain-lain. | |
| Seluruh kelas Java Collection merupakan turunan kelas java.lang.Iterable. Sehingga dapat digunakan dalam perulangan foreach [FOREACH]. | |
| Seluruh kelas-kelas Java Collection merupakan kelas generic, sehingga dapat digunakan untuk menampung objek dengan berbagai tipe data. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| LinkedList merupakan struktur data yang setiap data nya memiliki pointer ke data berikutnya dan data sebelumnya. Berbeda dengan ArrayList, pada LinkedList data tidak disimpan pada index. | |
| LinkedList merupakan struktur data yang dapat digunakan sebagai solusi kekurangan pada ArrayList, yaitu pada saat penghapusan data. | |
| Pada LinkedList, penghapusan data hanya melakukan 3 langkah, misal kita menghapus data ke 5 : | |
| 1. Hapus data ke -5 | |
| 2. Ubah pointer next data ke -4 menjadi mengacu ke data ke -6 | |
| 3. Ubah pointer prev data ke -6 menjadi mengacu ke data ke -4 | |
| Seluruh operasi yang ada pada LinkedList hampir sama dengan yang ada pada ArrayList. Sehingga penggunaanya cukup sama dengan ArrayList. | |
| */ | |
| package com.agungpambudi.generic; | |
| import java.util.LinkedList; | |
| public class Main { | |
| public static void main(String[] args) { | |
| LinkedList<String> list = new LinkedList<String>(); | |
| // tambah data | |
| list.add("Data Baru"); | |
| // ubah data | |
| list.set(0, "Data Baru Lagi"); | |
| // hapus data | |
| list.remove(0); | |
| // total data | |
| int total = list.size(); | |
| } | |
| } | |
| // Namun yang menjadi permasalahan dalam LinkedList yaitu saat proses pencarian. Dikarenakan pada LinkedList, data tidak memiliki index, maka saat terjadi proses pencarian, maka dilakukan secara sequensial, sehingga dapat memperlambat proses pencarian. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Set merupakan struktur data yang digunakan untuk menampung data yang datanya tidak boleh ada yang sama. Jika data yang sama, maka data hanya akan ditampung sekali. | |
| Set merupakan Interface, sehingga dibutuhkan implementasi sebuah kelas untuk menggunakan Set. | |
| Dalam Java Collection, implementasi defaultnya adalah HashSet, dimana HashSet melakukan pengecekan duplikasi berdasarkan | |
| -------------------------------- | |
| metode equals() dan hashCode(). | |
| -------------------------------- | |
| Secara default hashCode() setiap objek itu unik | |
| dan defaulnya metode equals() membandingkan objek pada memori, jika lokasi memorinya sama, maka dianggap sama, namun kita dapat membuat implementasi hashCode() sendiri, misal untuk Mahasiswa, mahasiswa disebut sama jika memiliki Nim yang sama, Mahasiswa tidak dianggap sama jika Nama nya sama, namun Nim nya berbeda, sehingga kita dapat membuat kelas Mahasiswa seperti berikut : | |
| */ | |
| package com.agungpambudi.generic; | |
| public class Mahasiswa { | |
| private int npm; | |
| private String nama; | |
| public String getNama() { | |
| return nama; | |
| } | |
| public void setNama(String nama) { | |
| this.nama = nama; | |
| } | |
| public int getNpm() { | |
| return npm; | |
| } | |
| public void setNpm(int npm) { | |
| this.npm = npm; | |
| } | |
| @Override | |
| public boolean equals(Object obj) { | |
| Mahasiswa mhs = (Mahasiswa) obj; | |
| return mhs.npm == npm; | |
| } | |
| @Override | |
| public int hashCode() { | |
| return npm; | |
| } | |
| } | |
| // Dengan demikian, maka kelas Mahasiswa, hashCode()-nya akan dicek berdasarkan Nim : | |
| package com.agungpambudi.generic; | |
| import java.util.HashSet; | |
| import java.util.Set; | |
| import com.agungpambudi.generic.Mahasiswa; | |
| public class Main { | |
| public static void main(String[] args) { | |
| Set<Mahasiswa> set = new HashSet<Mahasiswa>(); | |
| Mahasiswa a = new Mahasiswa(); | |
| a.setNpm(1); | |
| a.setNama("Agung Pambudi"); | |
| set.add(a); | |
| Mahasiswa b = new Mahasiswa(); | |
| b.setNpm(1); | |
| b.setNama("Restu Sugiarto"); | |
| set.add(b); | |
| for (Mahasiswa m : set) { | |
| System.out.println("Npm : " + m.getNpm()); | |
| System.out.println("Nama : " + m.getNama()); | |
| } | |
| } | |
| } | |
| /* | |
| Maka hasilnya adalah : | |
| ----------------------------- | |
| Nim : 1 | |
| Nama : Agung Pambudi | |
| ----------------------------- | |
| Artinya hanya mahasiswa dengan nama Agung Pambudi saja yang masuk, sedangkan Restu Sugiarto tidak masuk, kenapa? Hal ini dikarenakan memiliki npm yang sama yaitu 1. | |
| */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Seorang veteran java, atau dengan kata lain programmer yang telah lama mempelajari java. Akan lebih akrab dengan yang namanya Vector dibandingkan dengan ArrayList. Mungkin juga bagi programmer java awam yang baru belajar, gurunya sering memberikan Vector dibandingkan ArrayList. Pertanyaannya apakah Vector dan ArrayList itu? Dan apa kegunaan keduanya? | |
| Vector adalah sebuah class yang ditunkan dari interface Collection, yaitu sebuah interface yang digunakan untuk penggolahan data yang bersifat seperti array dinamis, yakni array yang ukurannya secara dinamis dapat membesar ketika data yang dimasukkan melebihi daya tampung. Setiap metode dalam Vector diberih keyword “synchronized”, sehingga ketika dieksekusi dalam sebuah Thread, maka tak akan terjadi kemacetan Thread. | |
| ArrayList adalah sebuah class yang sama dengan Vector dan memiliki fungsi yang hampir sama dengan Vector, namun perbedaannya terletak pada metode yang dimiliki oleh ArrayList. Berbeda dengan Vector, pada ArrayList setiap metode tidak diberi keyword “synchronized”, sehingga ketika dieksekusi dalam Thread, hal ini dapat mengakibatkan unsafe Thread, alias dapat terjadi tubrukan Thread ketika Thread mencoba untuk memanggil metode ArrayList. Namun bukan berarti ArrayList tidak berguna, karena tak adanya keyword “synchronized” pada metode ArrayList maka untuk menjalankan metode yang ada pada ArrayList membutuhkan waktu yang lebih singkat dari pada menjalankan metode yang ada pada Vector. | |
| Kesimpulannya jika kita ingin membuat array dinamis yang dijalankan menggunakan Thread, maka gunakanlah Vector, sedangkan jika memang proses yang kita butuhkan tidak menggunakan Thread, maka gunakanlah ArrayList agar proses pengolahan array dinamis lebih cepat. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment