Object
yang mana tidak boleh ada dua dari objek yang sama di dalam satu himpunan. Objek obj1
dan obj2
adalah objek yang sama jika obj1.equals(obj2)
menghasilkan nilai true (lihat bagian sebelumnya untuk penjelasan tentang ini).Set mengimplementasikan metode umum pada
Collection
dengan sedikit modifikasi sehingga tidak memiliki objek yang sama di dalamnya. Misalnya, jika set
adalah objek bertipe Set
maka set.add(obj)
tidak melakukan apa-apa jika obj
sudah ada di dalam set
.Java memiliki dua kelas yang mengimplementasikan interface
Set
, yaitu java.util.TreeSet
dan java.util.HashSet
.Selain sebagai
Set
, objek bertipe TreeSet
memiliki sifat di mana elemen-elemennya terurut dalam urutan menaik. Iterator
dari suatu TreeSet
akan mengunjungi elemen dalam set tersebut dalam urutan menaik.TreeSet
tidak bisa menyimpan semua objek, karena objek yang disimpan harus bisa diurutkan. Atau dengan kata iain, objek yang disimpan dalam TreeSet
harus mengimplementasikan interface Comparable
dan obj1.compareTo(obj2)
harus bisa membandingkan 2 objek obj1
dan obj2
dengan baik. Atau cara lainnya adalah dengan menggunakan Comparator
yang bisa dimasukkan sebagai parameter dalam konstruktor ketika TreeSet
dibuat. Di sini Comparator
digunakan untuk membandingkan objek yang akan dimasukkan di dalam set.Pada implementasi
TreeSet
, elemen di dalamnya disimpan dalam bentuk yang mirip dengan pohon pengurutan biner . Pohon yang digunakan bersifat seimbang (balanced) yang artinya semua simpul daunnya berjarak sama dari akar pohonnya. Dengan menggunakan pohon seimbang, kita bisa memastikan bahwa kita bisa mencapai semua simpul daunnya dengan secepat mungkin. Menambah dan mengurangi simpulnya juga bisa dilakukan dengan cepat.Karena
TreeSet
mengurutkan elemen-elemennya dan menjamin tidak ada duplikasi objek, TreeSet
sangat berguna untuk beberapa aplikasi. Misalnya, kita akan membuat program untuk menghitung semua kata dalam suatu artikel dan menampilkan semua kata yang ditemukan. List kata-kata dalam artikel itu harus diurutkan, kemudian kata-kata yang sama dihapus. Dengan menggunakan TreeSet
, program tersebut dapat dibuat dengan sangat mudah, menjadi :TreeSet kata = new TreeSet(); while masih ada data dari input : kt = kata berikutnya dari input kata.add(kt); Iterator iter = kata.iterator(); while (iter.hasNext()): Tampikan iter.next() ke layar.
kol
adalah koleksi String
(atau tipe lain yang mengimplementasikan compareTo()
). Kita bisa menggunakan TreeSet
untuk mengurutkan item dari kol
dan menghapus duplikasi dengan :TreeSet set = new TreeSet(); set.addAll(kol);
kol
ke dalam set
. Karena berbentuk Set
, maka duplikasi akan dihapus. Karena berbentuk TreeSet
maka semua elemennya akan terurut. Jika kita ingin data tersebut disimpan dalam struktur data lain, kita bisa mengubahnya dengan mudah. Misalnya, untuk membuat ArrayList
dari TreeSet
, bisa kita tulis dengan :TreeSet set = new TreeSet(); set.addAll(kol); ArrayList list = new ArrayList(); list.addAll(set);
Collection
. Semua item dalam Collection
ditambahkan ke dalam koleksi baru ketika dibuat. Jadi new TreeSet(kol)
membuat TreeSet
yang memiliki elemen yang sama seperti koleksi kol
.Atau kita bisa menyingkat keempat baris kode di atas dalam satu baris kode :
ArrayList list = new ArrayList( new TreeSet(kol) );
kol
tanpa duplikasi. Ini adalah contoh dari keampuhan pemrograman generik.(Sepertinya tidak ada struktur data list dengan duplikasi pada Java, atau
TreeSet
yang membolehkan duplikasi. Pada bahasa pemrograman C++ struktur data ini disebut multiset. Pada bahasa Smalltalk, struktur data seperti ini disebut bag (kantong). Pada Java, untuk saat ini, tidak ada struktur data seperti ini.)HashSet
mengimplementasikan tabel hash yang akan kita bahas di bagian berikutnya. Operasi penambahan, pencarian, dan penghapusan dilakukan dengan sangat efisien pada tabel hash, bahkan lebih cepat lagi dari TreeSet
. Elemen pada HashSet
tidak disimpan dalam urutan tertentu.Iterator
dari HashSet
akan mengunjungi elemen-elemen pada HashSet
dalam urutan yang sepertinya acak dan mungkin berubah jika elemen baru ditambahkan.Karena elemen pada
HashSet
tidak diurutkan, maka semua objek (termasuk yang tidak mengimplementasikan interface Comparable
) bisa dimasukkan dalam HashSet
. Kita bisa menggunakan HashSet
jika elemen yang kita akan masukkan tidak bisa dibandingkan, atau urutannya tidak penting, atau jika kecepatan lebih dipentingkan.
Tidak ada komentar:
Posting Komentar