Skip to main content

Array itu panjangnya statis. Siapa bilang?

Ketika kita belajar struktur data, selalu ada pembandingan antara array dan linked list. Di mana-mana dikatakan bahwa perbedaan antara array dan linked list adalah bahwa array itu sifatnya statis, begitu diset panjangnya 10 misalnya, maka sampai hari kiamatpun juga tetap 10, sedangkan linked list dikatakan bersifat dinamis, elemen-elemennya bisa ditambah dikurangi dan panjangnya bisa dikurangi atau ditambah dengan bebas.

Beberapa saat yang lalu, saya sedikit orek-orekan untuk array ini. Hasilnya adalah bahwa: array bisa dikembangkan ukurannya atau bisa dikurangi (mohon komentar para jago-jago pemrograman). Contoh syntaxnya adalah sebagai berikut:

misalkan diketahui array bertipe integer sebagai berikut:

int[] angka = new int[]{3,5,1,2,0};

menurut buku-buku, array angka hanya bisa diinisialisasi nilainya untuk angka[0] sampai angka[4]. Apabila kita 'memaksa' untuk mengakses atau menginisalisasi angka[5] dan seterusnya, maka akan muncul eksepsi yaitu "IndexOutOfBoundException". 

Dengan sedikit trik, kita bisa memanjangkan ukuran array ini:

int[] temp = angka;
angka = new int[6]; // misalkan kitahanya akan menambah satu alamat saja.

// mengkopi semua isi yang ditampung sementara oleh temp
int i=0;
for (int nilai:temp) {
angka[i] = nilai;
}

// sekarang kita bisa mengisi angka[5]
angka[5] = 98;

Catatan: ketika diinisialisasi array baru (new int[6]), anda mungkin berpikir bahwa itu adalah objek yang berbeda. Tidak, itu objek yang sama, yaitu objek "angka", hanya akan menunjuk memori-memori yang berbeda. Memori-memori yang sebelumnya ditunjuk pada saat new int[5] akan segera dikoleksi oleh interpreter java dan akan dibuang dengan sistem yang dinamakan dengan garbage collector (gc) 

Demikian, semoga bermanfaat.

Comments

Ijinkan saya berkomentar.
Pertama: Perbandingan antara linked list dengan array.
Sebenarnya, membandingkan antara linked list dengan array adalah sesuatu yang tidak applicable. Itu seperti membandingkan antara mesin kendaraan dengan bus. Mungkin karena sumber studi kita berbeda, jadi pemahaman kita berbeda juga :D.
Kenapa saya sebut demikian? Dari segi definisi, array adalah tipe data fisik. Sedangkan linked-list adalah tipe data abstrak. Disebut tipe data abstrak, karena tipe data ini akan berbeda antara yang "terlihat" oleh programmer dengan penyimpanan secara fisik. Hal ini berbeda dengan tipe data fisik, baik yang terlihat oleh programmer maupun dalam penyimpanan secara fisik relatif "akan sama".
Tujuan penggunaan linked-list bukanlah masalah dinamisnya, tetapi agar programmer bisa konsentrasi terhadap logika problem yang diselesaikan daripada memikirkan "cara penyimpanan" secara fisik.
Karena perbedaan ini, tidak heran kalau ada linked-list yang dibuat dengan menggunakan array. Tambahan: linked-list tidak selalu menggunakan pointer.

Kedua: Statis-Dinamis
Perbandingan statis-dinamis akan lebih tepat jika diterapkan antara tipe data array dengan tipe data pointer. Alasannya, karena keduanya sama-sama tipe data fisik.

Ketiga: Array dinamis di Java
Setuju sekali kalau ukuran array Java bisa diubah. Tetapi tentu saja belum memberikan keuntungan berarti dibandingkan dengan linked-list. Bayangkan, setiap kali menambah/mengurangi sebuah nilai (agar terlihat dinamis) yang dilakukan adalah:
- simpan nilai sebelumnya ke temp
- ubah ukuran array
- salin nilai temp ke tempat semula.
Bagi yang pernah belajar kompleksitas algoritma, algoritmanya jadi tidak efisien.

Sekedar pembahasan dari sudut pandang yang berbeda. Silakan dikoreksi kalau ada yang salah.

Wassalaam
Anonymous said…
Assalamualaikum Wr. Wb.
pake database kan lebih enteng...
mau nambah mpe 1 juta data or 1 milyar data, its no matter...
hehehe...
nb: kalau array tsb diterapkan ke dalam sistem web misalnya akan menjadika proses lebih lama algoritmanya ngk efektif...
coba kalau datanya ada 1 triliun dan arraynya ada 10 dimensi...
langsung jebol komputernya...
hehehe.

Wassalam
Anonymous said…
maaf pak, aq masih gak dong.. ;) hehehe
#anonimous
Mas/mbak, kalau kita mau ngakses database, bagaimanapun juga kita mengaksesnya dengan menggunakan Array.

Coba, misalnya dalam PHP,

$hasil = mysql_query($sql,$conn);
$row = mysql_fetch_row($hasil);

do {
list($ini,$itu) = $row;
} while (row = mysql_fetch_row($hasil));

anda lihat, bahwa hasil query tersebut disimpan dalam array.

Popular posts from this blog

If and For in Wolfram Mathematica (with examples)

IF Condition in Wolfram Mathematica The syntax is as follows xxxxxxxxxx If [ condition , what to do if true , what to do if false ] Some examples Example 1. Simple command x x = - 3 ; If [ x < 0 , - x , x ] 3 Example 2. If condition in a function abs [ x_ ] := If [ x < 0 , - x , x ] abs /@ { - 3 , 2 , 0 , - 2 } { 3 , 2 , 0 , 2 }   For in Wolfram Mathematica The syntax is as follows For [ start , test , inc , what to do ] Some examples Example 1. Simple Loop xxxxxxxxxx For [ i = 0 , i < 4 , i ++, Print [ i ]] 0 1 2 3 Example 2. Another simple loop For [ i = 10 , i > 0 , i --, Print [ i ]] 10 9 8 7 6 5 4 3 2 1 Example 3. Print list a = { 10 , 3 , 9 , 2 } For [ i = 1 , i < 5 , i ++, Print [ a [[ i ]]]] 10 3 9 2  

Find JIRA issues mentioned in Confluence Page

I have been walking through a lot of pages in internet but have not found any answer except one. However, the answer is not complete, so I will share my experience here. This feature is very useful, especially to summarize the issues found during certain tests, where the tests are reported in a confluence page. I found that there are so many questions about this, but Atlassian seems does not want to bother with this request. I found one way to do this by the following tricks Take one JIRA issue that related to the target confluence page (in this case, say it is GET-895) Find the global ID of a JIRA issue: http://bach.dc1.scram.com:8080/rest/api/latest/issue/GET-895/remotelink It will show the JSON like this: [{"id":28293,"self":"http://bach.dc1.scram.com:8080/rest/api/latest/issue/GET-895/remotelink/28293","globalId":"appId=662e1ccf-94da-3121-96ae-053d90587b29&pageId=105485659","application":{

Mininet/Containernet Problem: Exception: Error creating interface pair (s2-eth5,s3-eth1): RTNETLINK answers: File exists

If you did not shut down the previous running mininet/containernet network (e.g. if you lose your connection to remote server), you will got the following error when you try to rerun your mininet network Traceback (most recent call last): File "./mynet.py", line 31, in <module> net.addLink(d2, s1) File "build/bdist.linux-x86_64/egg/mininet/net.py", line 403, in addLink File "build/bdist.linux-x86_64/egg/mininet/link.py", line 430, in __init__ File "build/bdist.linux-x86_64/egg/mininet/link.py", line 474, in makeIntfPair File "build/bdist.linux-x86_64/egg/mininet/util.py", line 202, in makeIntfPair Exception: Error creating interface pair (d2-eth0,s1-eth2): RTNETLINK answers: File exists In order to solve the problem, you need to clean up the previous running topology by using the following command sudo mn -c It will clean up all your cache. It will be something like this $ sudo mn -c *** Re