tugas collection

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?

  1. public class MySet {
  2. public static void main(String args[]) {
  3. Set<Short> s = new HashSet<Short>();
  4. for(short i=0; i<100; i++) {
  5. s.add(i);
  6. s.remove(i-1);
  7. }
  8. System.out.println(s.size());
  9. }
  10. }

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?

  1. 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?

  1. 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?

  1. public interface Set<E>extends Collection<E> {
  2. public abstract boolean add(E o);
  3. public abstract boolean remove(Object o);
  4. }

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.

1 Komentar

  1. sanca said,

    Oktober 4, 2010 pada 6:37 am

    bagus cuii,..,
    q pengen di jelasin tentang cara kerja hashmap dan hashtable tw gmn??


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: