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 :
view plaincopy to clipboardprint?
- public class MySet {
- public static void main(String args[]) {
- Set<Short> s = new HashSet<Short>();
- for(short i=0; i<100; i++) {
- s.add(i);
- s.remove(i-1);
- }
- System.out.println(s.size());
- }
- }
public class MySet {
public static void main(String args[]) {
Set<Short> s = new HashSet<Short>();
for(short i=0; i<100; i++) {
s.add(i);
s.remove(i-1);
}
System.out.println(s.size());
}
}
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.
view plaincopy to clipboardprint?
- Set<Short> s = new HashSet<Short>();
Set<Short> s = new HashSet<Short>();
Oke clear. ketika melakukan proses add juga program menambahkan object short. Namun ketika melakukan remove, program meremove integer karena setiap operasi akan menghasilkan integer
view plaincopy to clipboardprint?
- s.remove(i-1); // i-1 merupakan ekspresi aritmatika yg selalu mereturn integer
s.remove(i-1); // i-1 merupakan ekspresi aritmatika yg selalu mereturn integer
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
view plaincopy to clipboardprint?
- public interface Set<E>extends Collection<E> {
- public abstract boolean add(E o);
- public abstract boolean remove(Object o);
- }
public interface Set<E>extends Collection<E> {
public abstract boolean add(E o);
public abstract boolean remove(Object o);
}
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.





sanca berkata,
Oktober 4, 2010 pada 6:37 am
bagus cuii,..,
q pengen di jelasin tentang cara kerja hashmap dan hashtable tw gmn??