Dasar-Dasar Pemrograman Arrays and ArrayLists subtitle
Fakultas Ilmu Komputer, Universitas Indonesia Version 3.0 - Internal Use Only
Tujuan Pembelajaran
Memahami dan dapat menggunakan arrays dan array lists Mempelajari mengenai wrapper classes, auto boxing, dan generalized for loop Mengetahui beberapa algoritma array Mempelajari bagaimana cara menggunakan two-dimensional arrays Memahami perbedaan penggunaan arrays dan array lists pada program Mengimplementasikan arrays yang terisi secara parsial
2
Arrays
Digunakan ketika kita ingin menyimpan beberapa data yang memiliki tipe yang sama.
Deklarasi array (array adalah object) double[] array1;
Cara membuat sebuah object array yang berisi 10 elemen bertipe double : array1 = new double[10]; int[] array2 = {1, 3, 5, 7};
Nilai yang disimpan pada array bergantung pada tipe dari array tersebut. 3
Deklarasi Arrays
Big Java by Cay Horstmann 4 Copyright © 2009 by John Wiley & Sons. All rights reserved.
Akses Arrays
Elemen pada array diakses melalui indeks Indeks menunjukkan posisi elemen pada array Gunakan simbol “[]” untuk mengakses sebuah elemen pada array : values[2] = 29.95;
Indeks dimulai dari nol Indeks terakhir di ukuran array - 1
5
Sintaks Arrays
6
Arrays
Menggunakan nilai yang disimpan pada array :
System.out.println(“Nilai elemen ketiga adalah " + values[2]);
Panjang dari array (banyaknya data yang disimpan)
values.length bukan sebuah method!
Mengakses elemen
yang tidak ada akan menghasilkan error
double[] values = new double[10];
values[10] = 29.95; // ERROR
Keterbatasan : Panjang
array tetap
7
Self Check
What elements does the data array contain after the following statements? double[] values = new double[10]; for (int i = 0; i < values.length; i++) values[i] = i * i;
Answer: 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, but not 100
8
Arrays of Objects
Kita dapat membuat array yang memiliki tipe objects BankAccount[] accounts = new BankAccount[10]; accounts[3] = new BankAccount(…);
9
Don’t: Parallel Arrays!
Jangan memisahkan data yang merupakan suatu kesatuan di array yang berbeda. Gunakan arrays of objects!
Why? Apabila kita ingin menambahkan accountName, hanya class BankAccount saja yang perlu diubah 10
ArrayLists
Data yang dapat disimpan pada array terbatas ArrayLists Menyimpan sekumpulan objects Dapat membesar dan mengecil sesuai kebutuhan Menyediakan beberapa methods, contohnya untuk menyimpan dan menghapus data Deklarasi sebuah ArrayList: ArrayList
names = new ArrayList();
akan menyimpan objects yang memiliki tipe T.
Method size() digunakan untuk mengembalikan jumlah elemen 11
Menambahkan elemen
Untuk menambahkan sebuah object di akhir arraylist, gunakan method add : names.add("Emily"); names.add("Bob"); names.add("Cindy");
12
Mengakses elemen
Gunakan method get() String name = names.get(2); // gets the third element of the arraylist
Most common bound error : int i = names.size(); name = names.get(i); // Error // legal index values are 0 ... i-1
13
Mengatur dan Menghapus Elemen
Gunakan set() method untuk mengubah elemen: names.set(2, "Carolyn");
Gunakan remove() method untuk menghapus elemen pada indeks tertentu: names.remove(1);
14
Menambah dan Menghapus Elemen names.add("Emily"); names.add("Bob"); names.add("Cindy"); names.set(2, "Carolyn"); names.add(1, "Ann");
names.remove(1);
15
Penggunaan ArrayLists ArrayList<String> names = new ArrayList<String>();
Constructs an empty arraylist that can hold strings.
names.add("Ann"); names.add("Cindy");
Adds elements to the end.
System.out.println(names);
Prints [Ann, Cindy].
names.add(1, "Bob");
Inserts an element at index 1. names is now [Ann, Bob, Cindy].
names.remove(0);
Removes the element at index 0. names is now [Bob, Cindy].
names.set(0, "Bill");
Replaces an element with a different value. names is now [Bill, Cindy].
Big Java by Cay Horstmann 16 Copyright © 2009 by John Wiley & Sons. All rights reserved.
Penggunaan ArrayLists String name = names.get(i);
Gets an element.
String last = names.get(names.size() - 1);
Gets the last element.
ArrayList squares = new ArrayList(); for (int i = 0; i < 10; i++) { squares.add(i * i); }
Constructs an arraylist holding the first ten squares.
Big Java by Cay Horstmann 17 Copyright © 2009 by John Wiley & Sons. All rights reserved.
Wrapper Class
Bagaimana apabila kita ingin menyimpan tipe primitive pada ArrayList?
Java menyediakan wrapper class untuk menyimpan data dengan tipe primitive dalam bentuk objects.
Double d = new Double(29.95);
Wrapper class dapat digunakan ketika data yang ingin disimpan harus bertipe objects ArrayList data = new ArrayList(); data.add(29.95); double x = data.get(0); 18
Wrappers
19
Auto-boxing / Auto-unboxing
Auto-boxing merupakan konversi otomatis antara tipe primitive dengan wrapper class yang berkesesuaian : Double d = 29.95; // auto-boxing; same as // Double d = new Double(29.95); double x = d; // auto-unboxing; same as // double x = d.doubleValue();
20
Auto-boxing pada Expression
Auto-boxing juga bekerja pada arithmetic expressions : Double d = new Double(12.8); d = d + 1;
Sama dengan : auto-unbox d into a double add 1 • auto-box the result into a new Double store a reference to the newly created wrapper object in d
21
Auto-boxing dan ArrayLists
Untuk menyimpan tipe data numerik dalam ArrayList, gunakan tipe wrapper sebagai parameter type: ArrayList values = new ArrayList(); values.add(29.95); double x = values.get(0);
Menyimpan wrapped numbers tidak efisien Dapat digunakan apabila data yang disimpan tidak besar Gunakan arrays untuk menyimpan data angka yang besar
22
Self Check
Suppose values is an ArrayList of size > 0. How do you increment the element with index 0? values.set(0, values.get(0) + 1);
23
The Enhanced for Loop
Untuk melakukan iterasi pada suatu koleksi data double[] values = ...; double sum = 0; for (double element : values) { sum = sum + element; } sama dengan for (int i = 0; i < values.length; i++) { sum = sum + values[i]; } 24
Dapat digunakan pula pada ArrayList ArrayList accounts = ...; double sum = 0; for (BankAccount account : accounts) { sum = sum + account.getBalance(); }
ekivalen dengan : for (int i = 0; i < accounts.size(); i++) { BankAccount account = accounts.get(i); sum = sum + account.getBalance(); } 25
The Enhanced for Loop
“for each loop” tidak memperbolehkan kita untuk mengubah konten dari sebuah array. for (double element : values) { element = 0; // ERROR—this assignment does not // modify array element } Gunakan for loop tradisional!
26
Self Check
Write a “for each” loop that prints all elements in the array values.
Answer: for (double element : values){ System.out.println(element); }
27
Self Check
Apa yang dilakukan oleh “for each loop” berikut? int counter = 0; for (BankAccount a : accounts) { if (a.getBalance() == 0) { counter++; } }
Answer: It counts how many accounts have a zero balance
28
Partially Filled Arrays
Array length: jumlah maksimum elemen pada array Umumnya, array hanya terisi setengah penuh Kita perlu mencatat ukuran array yang sebenarnya Gunakan penamaan yang sesuai: final int VALUES_LENGTH = 100; double[] values = new double[VALUES_LENGTH]; int valuesSize = 0;
Update valuesSize ketika menambahkan sebuah elemen: values[valuesSize] = x; valuesSize++;
29
Partially Filled Arrays (Example)
30
Self Check Buatlah sebuah iterasi untuk mencetak elemen pada sebuah array values dalam urutan yang terbalik, mulai dari elemen terakhir. Jumlah elemen disimpan di variabel valuesSize
Answer:
for (int i = valuesSize - 1; i >= 0; i--) System.out.println(values[i]);
31
Self Check
How do you remove the last element of the partially filled array values?
Answer: • valuesSize--;
32
ARRAY ALGORITHMS
33
Mencari Nilai Maksimum/Minimum
1
Tentukan sebuah elemen sebagai elemen awal Kandidat? Bandingkan dengan elemen lainnya Perbarui nilai apabila menemukan nilai yang lebih besar/kecil max = values[0]
values[0] values[1] values[2]
2
compare
values[3] … values[length-1] 34
Filling
Isi array dengan nilai nol: for (int i = 0; i < values.length; i++) { values[i] = 0; }
Isi arraylist dengan angka kuadrat for (int i = 0; i < values.size(); i++) { values.set(i, i * i); }
35
Sum and Average
Untuk menghitung jumlah dari seluruh elemen, simpan dalam sebuah variabel yang terus menerus diperbarui: double total = 0; for (double element : values) { total = total + element; }
Untuk menghitung rata-rata, bagi dengan jumlah elemen double average = total / values.size(); // for an array list
Pastikan bahwa jumlah elemen tidak nol! 36
Counting Matches public int count(double atLeast) { int matches = 0; for (BankAccount account : accounts) { if (account.getBalance() >= atLeast) matches++; //Found a match } return matches; }
37
Mencari Sebuah Nilai
Cek semua elemen hingga menemukan elemen yang diinginkan Contoh: public BankAccount find(int accountNumber) { for (BankAccount account : accounts) { if (account.getAccountNumber() == accountNumber) // Found a match return account; } return null; // No match in the entire array list } 38
Menghapus elemen
ArrayList gunakan method remove
Array yang tidak terurut 1. Ganti elemen yang dihapus dengan elemen terakhir pada array 2. Decrement variabel yang menyimpan ukuran array values[pos] = values[valuesSize - 1]; valuesSize--;
39
Removing an Element
Array terurut 1. Pindahkan semua elemen setelah elemen yang dihapus ke indeks yang lebih awal 2. Decrement variabel yang menyimpan ukuran array for (int i = pos; i < valuesSize - 1; i++) { values[i] = values[i + 1]; } valuesSize--;
40
Removing an Element
41
Inserting an Element
ArrayList gunakan method add Array tidak terurut: Masukkan elemen di indeks terakhir array Increment variabel yang menyimpan ukuran array if (valuesSize < values.length) { values[valuesSize] = newElement; valuesSize++; }
42
Inserting an Element
Array terurut Mulai dari akhir array, pindahkan elemen satu per satu ke indeks yang lebih tinggi, hingga sampai di posisi dimana elemen baru akan diletakkan Masukkan elemen di posisi tersebut Increment variabel yang menyimpan ukuran array if (valuesSize < values.length) { for (int i = valuesSize; i > pos; i--) { values[i] = values[i - 1]; } values[pos] = newElement; valuesSize++; }
43
Inserting an Element
44
Menyalin Array
Menyalin (copy) sebuah array akan mengakibatkan adanya reference lain ke array tersebut double[] values = new double[6]; . . . // Fill array double[] prices = values;
45
Menyalin Array
Untuk membuat salinan dari sebuah array, gunakan method Arrays.copyOf: double[] prices = Arrays.copyOf(values, values.length);
46
Memperbesar Array
Untuk memperbesar sebuah array, gunakan method Arrays.copyOf: values = Arrays.copyOf(values, 2 * values.length);
47
Array Dua Dimensi
Ketika membuat sebuah array dua dimensi, spesifikasikan jumlah baris dan kolom yang diinginkan final int ROWS = 3; final int COLUMNS = 3; String[][] board = new String[ROWS][COLUMNS];
Akses elemen dengan pasangan indeks board[1][1] = "x"; board[2][1] = "o"; 48
Traversing Two-Dimensional Arrays
Gunakan dua nested loops ketika ingin mengunjungi array dua dimensi: for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLUMNS; j++) board[i][j] = " ";
49
Traversing Two-Dimensional Arrays
Kita juga dapat menggunakan dimensi array dari variabel array: •
board.length is the number of rows
•
board[0].length is the number of columns
Sehingga, loop dapat juga dituliskan menjadi: for (int i = 0; i < board.length; i++) for (int j = 0; j < board[0].length; j++) board[i][j] = " ";
50
Key Learning Points
Arrays digunakan untuk menyimpan sekumpulan data yang memiliki kesamaan tipe ArrayLists digunakan untuk menyimpan sekumpulan objects Ukuran dari ArrayLists bersifat fleksibel, ukuran arrays adalah tetap Class ArrayList menyediakan beberapa method untuk melakukan operasi pada ArrayList Gunakan wrapper class ntuk menyimpan tipe data primitive dalam ArrayLists
51
Tugas Membaca
Chapter 6. Arrays and Array Lists http://docs.oracle.com/javase/tutorial/java/nutsandbolts/ar rays.html
52
What’s next?
Chapter 7. Designing Classes
53