Skip to content

Instantly share code, notes, and snippets.

@AgungPambudi
Created January 27, 2020 06:47
Show Gist options
  • Select an option

  • Save AgungPambudi/f58185820ff5bcd7e3c5eccc9d21afc8 to your computer and use it in GitHub Desktop.

Select an option

Save AgungPambudi/f58185820ff5bcd7e3c5eccc9d21afc8 to your computer and use it in GitHub Desktop.
Java Collection : Array, LinkedList, Stack, Tree, Vector dan lain-lain.
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
}
}
}
// 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.
*/
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.
/*
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.
/*
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.
*/
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