Dasar-Dasar Pemrograman - ir.cs.ui.ac.idir.cs.ui.ac.id/alfan/ddp2/ddp2-06-array-v2.pdf · 2 Tujuan...

Preview:

Citation preview

Dasar-Dasar Pemrograman

Fakultas Ilmu Komputer, Universitas IndonesiaVersion 3.0 - Internal Use Only

Arrays and ArrayLists

subtitle

2

Tujuan Pembelajaran Memahami dan dapat menggunakan arrays dan array lists

Mempelajari mengenai wrapper classes, auto boxing, dangeneralized 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

3

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 elemenbertipe double :

array1 = new double[10];

int[] array2 = {1, 3, 5, 7};

Nilai yang disimpan pada array bergantung pada tipe dari array tersebut.

4

Deklarasi Arrays

Big Java by Cay HorstmannCopyright © 2009 by John Wiley & Sons. All rights

reserved.

5

Akses Arrays

Elemen pada array diakses melalui indeks

Indeks menunjukkan posisi elemen pada array

Gunakan simbol “[]” untuk mengakses sebuah elemenpada array : values[2] = 29.95;

Indeks dimulaidari nol

Indeks terakhirdi ukuran array - 1

6

Sintaks Arrays

7

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

8

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

9

Arrays of Objects

Kita dapat membuat array yang memiliki tipe objects

BankAccount[] accounts = new BankAccount[10];

accounts[3] = new BankAccount(…);

10

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

11

ArrayLists

Data yang dapat disimpan pada array terbatas

ArrayLists

Menyimpan sekumpulan objects

Dapat membesar dan mengecil sesuai kebutuhan

Menyediakan beberapa methods, contohnya untukmenyimpan dan menghapus data

Deklarasi sebuah ArrayList:

ArrayList<T> names = new ArrayList<T>();

akan menyimpan objects yang memiliki tipe T.

Method size() digunakan untuk mengembalikan jumlahelemen

12

Menambahkan elemen

Untuk menambahkan sebuah object di akhir arraylist, gunakan method add :

names.add("Emily");

names.add("Bob");

names.add("Cindy");

13

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

14

Mengatur dan Menghapus Elemen

Gunakan set() method untuk mengubah elemen:

names.set(2, "Carolyn");

Gunakan remove() method untuk menghapus elemen padaindeks tertentu:

names.remove(1);

15

Menambah dan Menghapus Elemen

names.add("Emily"); names.add("Bob"); names.add("Cindy");names.set(2, "Carolyn");

names.add(1, "Ann");

names.remove(1);

16

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 HorstmannCopyright © 2009 by John Wiley & Sons. All rights

reserved.

Penggunaan ArrayLists

17

String name = names.get(i); Gets an element.

String last =names.get(names.size() - 1);

Gets the last element.

ArrayList<Integer> squares =new ArrayList<Integer>();

for (int i = 0; i < 10; i++){

squares.add(i * i);}

Constructs an arraylist holding the first ten squares.

Big Java by Cay HorstmannCopyright © 2009 by John Wiley & Sons. All rights

reserved.

Penggunaan ArrayLists

18

Wrapper Class

Bagaimana apabila kita ingin menyimpan tipe primitive padaArrayList?

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 ingindisimpan harus bertipe objects

ArrayList<Double> data = new ArrayList<Double>();

data.add(29.95);

double x = data.get(0);

19

Wrappers

20

Auto-boxing / Auto-unboxing

Auto-boxing merupakan konversi otomatis antara tipeprimitive 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();

21

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

Auto-boxing pada Expression

22

Auto-boxing dan ArrayLists

Untuk menyimpan tipe data numerik dalam ArrayList, gunakan tipe wrapper sebagai parameter type:

ArrayList<Double> values = new ArrayList<Double>();

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

23

Self Check

Suppose values is an ArrayList<Double> of size > 0. How do you increment the element with index 0?

values.set(0, values.get(0) + 1);

24

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];

}

25

Dapat digunakan pula pada ArrayList

ArrayList<BankAccount> 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();

}

26

The Enhanced for Loop

“for each loop” tidak memperbolehkan kita untuk mengubahkonten dari sebuah array.

for (double element : values)

{

element = 0;

// ERROR—this assignment does not

// modify array element

}

Gunakan for loop tradisional!

27

Self Check

Write a “for each” loop that prints all elements in the array values.

Answer:

for (double element : values){

System.out.println(element);

}

28

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

29

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++;

30

Partially Filled Arrays (Example)

31

Self Check

Buatlah sebuah iterasi untuk mencetak elemen pada sebuaharray values dalam urutan yang terbalik, mulai dari elementerakhir. Jumlah elemen disimpan di variabel valuesSize

Answer:

for (int i = valuesSize - 1; i >= 0; i--)

System.out.println(values[i]);

32

Self Check

How do you remove the last element of the partially filled array values?

Answer:

• valuesSize--;

33

ARRAY ALGORITHMS

34

Mencari Nilai Maksimum/Minimum

Tentukan sebuah elemen sebagai elemen awal

Kandidat?

Bandingkan dengan elemen lainnya

Perbarui nilai apabila menemukan nilai yang lebih besar/kecil

values[0]

values[1]

values[2]

values[3]

values[length-1]

max = values[0]1

2 compare

35

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);

}

36

Sum and Average

Untuk menghitung jumlah dari seluruh elemen, simpandalam 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!

37

Counting Matches

public int count(double atLeast)

{

int matches = 0;

for (BankAccount account : accounts)

{

if (account.getBalance() >= atLeast) matches++; //Found a match

}

return matches;

}

38

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

}

39

Menghapus elemen

ArrayList gunakan method remove

Array yang tidak terurut

1. Ganti elemen yang dihapus dengan elemen terakhir padaarray

2. Decrement variabel yang menyimpan ukuran array

values[pos] = values[valuesSize - 1];

valuesSize--;

40

Removing an Element

Array terurut

1. Pindahkan semua elemen setelah elemen yang dihapus keindeks yang lebih awal

2. Decrement variabel yang menyimpan ukuran array

for (int i = pos; i < valuesSize - 1; i++)

{

values[i] = values[i + 1];

}

valuesSize--;

41

Removing an Element

42

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++;

}

43

Inserting an Element

Array terurut

Mulai dari akhir array, pindahkan elemen satu per satu keindeks yang lebih tinggi, hingga sampai di posisi dimanaelemen 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++;

}

44

Inserting an Element

45

Menyalin Array

Menyalin (copy) sebuah array akan mengakibatkan adanyareference lain ke array tersebut

double[] values = new double[6];

. . . // Fill array

double[] prices = values;

46

Menyalin Array

Untuk membuat salinan dari sebuah array, gunakan method Arrays.copyOf:

double[] prices = Arrays.copyOf(values, values.length);

47

Memperbesar Array

Untuk memperbesar sebuah array, gunakan method Arrays.copyOf:values = Arrays.copyOf(values, 2 * values.length);

48

Array Dua Dimensi

Ketika membuat sebuah array dua dimensi, spesifikasikanjumlah 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";

49

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] = " ";

50

Traversing Two-Dimensional Arrays

Kita juga dapat menggunakan dimensi array dari variabelarray:

• 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] = " ";

51

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 untukmelakukan operasi pada ArrayList

Gunakan wrapper class ntuk menyimpan tipe data primitive dalam ArrayLists

52

Tugas Membaca

Chapter 6. Arrays and Array Lists

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

53

What’s next?

Chapter 7. Designing Classes