Algorithms and Programming Java 5
Bayangkan harus menyimpan nilai 40 mahasiswa. Membuat 40 variabel jelas tidak praktis. Pada pertemuan ini kita belajar array untuk menyimpan banyak data bertipe sama dalam satu variabel, array dua dimensi untuk data berbentuk tabel, serta ArrayList sebagai kumpulan data yang ukurannya fleksibel.
Pendahuluan
Tujuan Pembelajaran
Setelah pertemuan ini, kamu diharapkan mampu:
- Mendeklarasikan, mengisi, dan mengakses elemen array satu dimensi.
- Menelusuri array menggunakan
fordan enhanced for (for-each). - Melakukan operasi umum: jumlah, rata-rata, nilai maksimum/minimum, pencarian, dan pembalikan.
- Menggunakan class
Arraysuntuk mengurutkan, mencetak, dan menyalin array. - Membuat dan mengolah array dua dimensi (matriks).
- Menggunakan
ArrayListbeserta method-nya, termasuk fitur Java 21 sepertigetFirst(),getLast(), danreversed().
Alokasi Waktu Pertemuan Ini
| Sesi | Topik | Durasi |
|---|---|---|
| Materi 1 | Review & konsep array | 10 menit |
| Materi 2 | Deklarasi, akses, dan penelusuran array | 20 menit |
| Materi 3 | Operasi umum pada array | 15 menit |
| Materi 4 | Class Arrays |
10 menit |
| Materi 5 | Array dua dimensi | 15 menit |
| Materi 6 | ArrayList |
20 menit |
| Materi 7 | List.of, immutable list & fitur Java 21 |
10 menit |
| Materi 8 | Studi kasus: rekap nilai kelas | 20 menit |
| Total Materi | 2 jam | |
| Latihan | Latihan Mandiri | 1 jam |
| Total | 3 jam |
Review Singkat
fordigunakan ketika jumlah pengulangan diketahui, sering dengan variabel indeksi.- Indeks pada
Stringdimulai dari 0; hal yang sama berlaku pada array. - Pola umum akumulator:
total += nilai;di dalam perulangan.
Konsep Array
Array adalah kumpulan elemen bertipe sama yang disimpan berurutan di memori dan diakses menggunakan indeks yang dimulai dari 0.
1 | Indeks : 0 1 2 3 4 |
Ciri-ciri array di Java:
- Ukuran tetap setelah dibuat.
- Semua elemen bertipe sama.
- Indeks valid:
0sampailength - 1. - Array adalah objek, sehingga punya properti
length(tanpa tanda kurung).
Deklarasi, Akses, dan Penelusuran
Membuat Array
1 | // 1. Menentukan ukuran saja (elemen terisi nilai default) |
Nilai default: 0 untuk int, 0.0 untuk double, false untuk boolean, '\u0000' untuk char, dan null untuk objek seperti String.
Mengakses dan Mengubah Elemen
1 | int[] angka = {10, 20, 30, 40, 50}; |
Menelusuri Array
1 | String[] buah = {"Apel", "Jeruk", "Mangga"}; |
Gunakan for biasa jika perlu mengubah elemen atau memakai indeks, dan for-each jika hanya membaca setiap elemen.
Mengisi Array dari Input
1 | import java.util.Scanner; |
Array Bersifat Referensi
Variabel array menyimpan alamat (referensi) ke array, bukan salinan isinya.
1 | int[] a = {1, 2, 3}; |
Operasi Umum pada Array
1 | int[] data = {45, 78, 12, 90, 33, 67}; |
Perhatikan pola swap (tukar) menggunakan variabel sementara: pola ini akan dipakai ulang pada algoritma pengurutan.
Class Arrays
Class java.util.Arrays menyediakan banyak method siap pakai.
| Method | Fungsi |
|---|---|
Arrays.toString(arr) |
Mengubah array menjadi teks [1, 2, 3] |
Arrays.sort(arr) |
Mengurutkan secara menaik (ascending) |
Arrays.fill(arr, nilai) |
Mengisi semua elemen dengan nilai tertentu |
Arrays.copyOf(arr, n) |
Menyalin dengan panjang baru n |
Arrays.copyOfRange(arr, a, b) |
Menyalin dari indeks a hingga sebelum b |
Arrays.equals(a, b) |
Membandingkan isi dua array |
Arrays.binarySearch(arr, x) |
Mencari nilai pada array yang sudah terurut |
Arrays.stream(arr).sum() |
Menjumlahkan semua elemen |
1 | import java.util.Arrays; |
Mencetak array langsung dengan
println(arr)tidak menampilkan isinya. Selalu gunakanArrays.toString()(atauArrays.deepToString()untuk 2D).
Array Dua Dimensi
Array 2D menyimpan data berbentuk baris dan kolom (tabel atau matriks).
1 | int[][] matriks = { |
Menelusuri dengan nested loop:
1 | for (int baris = 0; baris < matriks.length; baris++) { |
Membuat matriks kosong dan mengisinya, misalnya tabel perkalian:
1 | int[][] tabel = new int[5][5]; |
Penjumlahan dua matriks A + B = C:
1 | int[][] a = { |
Array 2D juga boleh memiliki panjang baris berbeda (jagged array), misalnya new int[3][] lalu setiap baris dibuat sendiri-sendiri.
ArrayList
Array memiliki ukuran tetap. Ketika jumlah data berubah-ubah (menambah atau menghapus), gunakan ArrayList, yaitu daftar dinamis yang ukurannya bertambah/berkurang otomatis.
1 | import java.util.ArrayList; |
Method yang sering dipakai:
| Method | Fungsi |
|---|---|
add(x) / add(i, x) |
Menambah di akhir / pada indeks tertentu |
get(i) |
Mengambil elemen indeks i |
set(i, x) |
Mengganti elemen indeks i |
remove(i) / remove(x) |
Menghapus berdasarkan indeks / nilai |
size() |
Jumlah elemen (bukan length) |
contains(x) / indexOf(x) |
Mencari elemen |
isEmpty() / clear() |
Cek kosong / hapus semua |
Collections.sort(list) |
Mengurutkan (import java.util.Collections) |
ArrayList Tidak Menyimpan Tipe Primitif
Tanda <...> menentukan tipe isi list (generics), dan harus berupa class. Gunakan wrapper class: Integer untuk int, Double untuk double, Boolean untuk boolean, dan Character untuk char. Konversi dari/ke tipe primitif dilakukan otomatis (autoboxing).
1 | List<Integer> angka = new ArrayList<>(); |
Jebakan: pada List<Integer>, remove(1) dianggap indeks, bukan nilai. Gunakan Integer.valueOf() bila ingin menghapus berdasarkan nilai.
Array vs ArrayList
| Array | ArrayList | |
|---|---|---|
| Ukuran | Tetap | Dinamis |
| Tipe isi | Primitif atau objek | Hanya objek (pakai wrapper) |
| Panjang | arr.length |
list.size() |
| Akses | arr[i] |
list.get(i) |
| Method bawaan | Sedikit (lewat Arrays) |
Banyak (add, remove, contains, …) |
List.of dan Fitur Java 21
List.of (Immutable)
1 | List<String> hari = List.of("Senin", "Selasa", "Rabu"); |
Sequenced Collections (Java 21)
Sejak Java 21, List memiliki method untuk mengakses elemen pertama dan terakhir tanpa menghitung indeks, serta membalik urutan:
1 | List<String> antrean = new ArrayList<>(List.of("Ani", "Budi", "Citra")); |
Sebelum Java 21, elemen terakhir harus diambil dengan list.get(list.size() - 1).
Variabel Tanpa Nama _ (Java 22+)
Jika nilai variabel loop tidak dipakai, kita bisa menggunakan _ sebagai unnamed variable untuk menegaskan bahwa variabel itu memang tidak digunakan:
1 | int jumlahItem = 0; |
Argumen Command Line pada main
Parameter String[] args pada main ternyata adalah array yang berisi argumen yang diberikan saat program dijalankan:
1 | public class Main { |
Jalankan dengan java Main.java Halo Java 25, maka args berisi ["Halo", "Java", "25"].
Studi Kasus: Rekap Nilai Kelas
1 | import java.util.Arrays; |
Perhatikan bahwa data nama dan nilai disimpan pada dua array paralel yang indeksnya saling berpasangan. Pada pertemuan lanjutan (Object-Oriented Programming), pasangan data seperti ini akan dibungkus dalam sebuah objek Mahasiswa.
Ringkasan
| Kebutuhan | Gunakan |
|---|---|
| Data banyak, ukuran tetap, bertipe primitif | Array int[], double[] |
| Data berbentuk tabel / matriks | Array 2D int[][] |
| Menelusuri semua elemen | for-each |
| Perlu indeks atau mengubah elemen | for biasa |
| Mengurutkan, mencetak, menyalin array | Class Arrays |
| Data dinamis (tambah/hapus) | ArrayList |
| Daftar yang tidak boleh berubah | List.of(...) |
Latihan
Kerjakan latihan berikut untuk mengetes pemahamanmu. Total durasi latihan adalah 60 menit.
| No | Latihan | Estimasi |
|---|---|---|
| 1 | Statistik Nilai | 10 menit |
| 2 | Pencarian & Pembalikan Array | 10 menit |
| 3 | Bubble Sort | 10 menit |
| 4 | Matriks | 10 menit |
| 5 | Daftar Belanja dengan ArrayList | 10 menit |
| 6 | Mini Project: Rekap Nilai Kelas | 10 menit |
| Total | 60 menit |
Latihan 1: Statistik Nilai (estimasi 10 menit)
Buat program yang meminta jumlah data N, kemudian N buah nilai (bilangan bulat). Tampilkan:
- Seluruh data dengan
Arrays.toString(). - Jumlah, rata-rata, nilai maksimum, dan nilai minimum tanpa memakai
Arrays.sort. - Banyak nilai yang lebih besar dari rata-rata.
- Banyak bilangan genap dan ganjil.
Latihan 2: Pencarian & Pembalikan Array (estimasi 10 menit)
Dengan array int[] data = {12, 45, 7, 89, 23, 45, 61}:
- Minta pengguna memasukkan sebuah angka, lalu tampilkan semua indeks tempat angka itu muncul (atau pesan
"tidak ditemukan"). - Tampilkan isi array secara terbalik tanpa mengubah array aslinya.
- Buat array baru yang berisi hanya elemen unik dari
data(tanpa duplikat), misalnya menggunakanArrayList.
Latihan 3: Bubble Sort (estimasi 10 menit)
Urutkan array {64, 34, 25, 12, 22, 11, 90} secara menaik tanpa Arrays.sort, menggunakan algoritma bubble sort: bandingkan dua elemen bersebelahan, tukar jika urutannya salah, ulangi hingga tidak ada pertukaran.
Petunjuk kerangka:1
2
3
4
5
6
7for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// tukar arr[j] dan arr[j + 1]
}
}
}
Cetak array pada setiap putaran luar agar proses pengurutan terlihat. Setelah selesai, bandingkan hasilnya dengan Arrays.sort.
Latihan 4: Matriks (estimasi 10 menit)
- Buat matriks 3x3, isi dari input pengguna, lalu tampilkan dalam bentuk tabel.
- Hitung jumlah setiap baris, setiap kolom, dan jumlah diagonal utama.
- Buat transpose matriks (baris menjadi kolom).
- Tantangan: kalikan dua matriks 2x2.
Latihan 5: Daftar Belanja dengan ArrayList (estimasi 10 menit)
Buat program menu berulang (do-while) untuk mengelola daftar belanja:
1 | 1. Tambah barang |
Ketentuan:
- Gunakan
ArrayList<String>. - Tolak barang yang sudah ada di daftar (
contains). - Tampilkan daftar bernomor, dan tampilkan pesan khusus bila daftar kosong.
- Gunakan
getFirst()dangetLast()untuk menampilkan barang pertama dan terakhir.
Latihan 6: Mini Project Rekap Nilai Kelas (estimasi 10 menit)
Kembangkan studi kasus rekap nilai:
- Input jumlah mahasiswa, lalu nama dan nilai tiap mahasiswa (simpan pada
ArrayList<String>danArrayList<Integer>). - Hitung grade tiap mahasiswa (A/B/C/D/E) menggunakan
switchexpression. - Tampilkan tabel rapi dengan
printf, serta statistik kelas: rata-rata, tertinggi, terendah, dan jumlah mahasiswa per grade. - Tampilkan 3 nilai teratas (peringkat).
Tantangan tambahan: simpan nilai 3 mata kuliah per mahasiswa pada array 2D int[][] nilai = new int[jumlahMhs][3], lalu hitung rata-rata per mahasiswa dan per mata kuliah.

