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

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":{...

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  

Android studio in ubuntu - problem: 'tools.jar' seems to be not in Android Studio classpath. Please ensure JAVA_HOME points to JDK rather than JRE.

I love coding, especially Java. Because Android apps is written in Java, I would love to make one as well. Unfortunately, when I tried to install Android Studio on my Ubuntu yesterday, I got this error message: 'tools.jar' seems to be not in Android Studio classpath. Please ensure JAVA_HOME points to JDK rather than JRE. When I google on this error, there are so many websites and forums discuss about this error as well as the solutions. However, in linux (or ubuntu in my case), sometime we have different environment so that the solution will not always work (sometimes we have to do another thing before or after that solution). And this also happen in this case. Here are what I did then: 1. Know what exactly the problem is: the problem is that the JAVA_HOME in my system did not point to JDK. Instead, it points to a JRE. JRE can only be used to run java applications, not to build them. 2. Check the java path used by the system. In terminal, I typed the following: ...