Rabu, 14 Desember 2011

Algoritma Generik (Java)


Interface Collection memiliki metode untuk melakukan beberapa operasi dasar pada koleksi. Karena "koleksi" adalah konsep yang sangat umum, maka operasi yang bisa dilakukan oleh semua koleksi juga sesuatu yang sangat umum. Misalnyakol adalah objek yang mengimplementasi interface Collection. Berikut ini adalah operasi yang bisa dilakukan.

- kol.size() -- mengembalikan int yang berisi banyaknya objek dalam suatu koleksi

- kol.isEmpty() -- mengembalikan boolean true jika koleksi kosong, atau ukurannya sama dengan 0
- kol.clear() -- menghapus semua objek dalam koleksi
- kol.contains(objek) -- mengembalikan nilai boolean jika objek ada dalam koleksi
- kol.add(objek) -- menambah objek ke dalam koleksi. Parameternya bisa berupa Object apa saja. 
Beberapa koleksi bisa berisi nilai null, sementara yang lain tidak. Misalnya menambahkan objek ke dalam Set tidak berpengaruh apa-apa jika objek tersebut sudah ada di dalamnya.

- kol.remove(objek) -- membuang objek dari dalam koleksi, jika ada, dan mengembalikan nilai boolean yang menyatakan apakah objek tersebut ada atau tidak di dalam koleksi
- kol.containsAll(kol2) -- mengembalikan nilai boolean jika semua objek dalam kol2 ada di dalam koleksi 

- kol. Parameternya bisa berupa Collection apa saja.
- kol.addAll(col2) -- menambahkan semua objek yang ada dalam koleksi kol2 ke dalam kol
- kol.removeAll(kol2) -- menghapus semua objek di kol yang ada pada kol2
- kol.retainAll(kol2) -- menghapus semua objek pada kol yang tidak ada pada kol2. Hanya akan mempertahankan objek yang ada pada kol2
- kol.toArray() -- mengembalikan array bertipe Object[] yang isinya semua item di dalam koleksi. Nilai yang dikembalikan bisa di-tipe cast ke dalam tipe array lain, jika perlu. Misalnya, jika kita tahu bahwa semua item di dalam kol bertipe String, maka(String[])kol.toArray() akan mengembalikan array String yang berisi semua string di dalam koleksi.

Karena semua metode adalah turunan dari interface Collection, maka metode ini harus didefinisikan pada semua objek yang mengimplementasikan interface ini. Akan tetapi ada masalah yang timbul. Misalnya ukuran suatu Collection tidak bisa diganti setelah dibuat. Metode yang menambah atau membuang objek tidak bisa digunakan untuk koleksi jenis ini. Meskipun mungkin legal untuk memanggil metode ini, pengecualian akan dilemparkan ketika program dijalankan. Jenis pengecualiannya bernamaUnsupportedOperationException.

Ada juga masalah efisiensi. Meskipun suatu operasi didefinisikan untuk beberapa jenis koleksi, tentunya unjuk kerjanya tidak sama untuk semua kelas. Bahkan untuk metode sesederhana size() bisa sangat berbeda dari satu jenis koleksi ke jenis koleksi lainnya.

Untuk beberapa jenis koleksi, waktu pengolahan sebanding dengan jumlah item di dalam koleksi. Koleksi lain mungkin memiliki variabel instansi yang melacak jumlah item di dalam koleksi, sehingga menjalankan size( ) sama dengan mengambil nilai variabel instansi ini. Artinya operasinya hanya dilakukan satu langkah saja, tidak peduli berapa banyak item yang ada di dalam koleksi.

Ketika kita menggunakan koleksi, alangkah lebih baiknya untuk mengetahui seberapa efisien suatu operasi dilakukan untuk jenis koleksi tertentu. Kita harus bisa memilih koleksi yang cocok untuk masalah yang kita hadapi. Kita akan lihat lebih detail di bagian berikutnya.

Tidak ada komentar:

Posting Komentar