All Articles

Java Collection Why you should care

Java Collection Framework, merupakan base dari proses struktur data di Java. Set adalalah satu satu bagian dari Collection yg menampung object2 unik, selain itu ada List, Map dan masih banyak lagi.

Langsung saja, pertanyaan nya begini : [code=‘java’] public class MySet { public static void main(String args[]) { Set s = new HashSet(); for(short i=0; i<100; i++) { s.add(i); s.remove(i-1); } System.out.println(s.size()); } } [/code]

apakah keluaran program ini ? a.1 b.100 c.Throws exception d.jawaban lainnya

dan jawabannya adalah b.100 mungkin banyak yg memilih jawaban lain.

Why 100? padahal sudah di remove setiap kali add. masalahnya adalah program menambahkan object Short dan meremove object Integer. please take a look at the source. Set didefenisikan dengan “generic” spesifik berisi object Short. [code=‘java’]Set s = new HashSet();[/code] Oke clear. ketika melakukan proses add juga program menambahkan object short. Namun ketika melakukan remove, program meremove integer karena setiap operasi akan menghasilkan integer [code=‘java’]s.remove(i-1); // i-1 merupakan ekspresi aritmatika yg selalu mereturn integer[/code]

Lalu mengapa tidak terjadi error? atau throws exception ? Inilah yg aneh, karena Set yg sebenarnya adalah merupakan suatu Interface. if we look at the API http://java.sun.com/j2se/1.5.0/docs/api/java/util/Set.html anda dapat melihat suatu keanehan, saya juga ga paham apakah ini kesalahan design dari si pembuat JAVA [code=‘java’] public interface Setextends Collection { public abstract boolean add(E o); public abstract boolean remove(Object o); } [/code] lihat parameter yg diminta oleh add dan remove. remove meminta parameter Object bukannya tipe generic yg telah didefenisikan. ini bahaya sekali, programmer akan menemukan banyak masalah yg tidak diketahui penyebabnya kalau ga teliti.

jadi perhatikan kalau menggunakan short dengan proses aritmatik pastikan dikembalikan menjadi short, atau gunakan saja integer or long.