Menyusun Program · Pelajaran 8 dari 10
ArrayList dan generics
9 menit baca · BelajarCode
Array Java berukuran tetap. ArrayList adalah array dinamis yang bisa bertambah dan berkurang, mirip list di Python.
1import java.util.ArrayList;2import java.util.Collections;34public class Main {5 public static void main(String[] args) {6 ArrayList<String> matkul = new ArrayList<>();7 matkul.add("Algoritma");8 matkul.add("Basis Data");9 matkul.add("Jaringan Komputer");10 matkul.add(1, "Matematika Diskrit");11 matkul.remove("Jaringan Komputer");1213 System.out.println(matkul);14 System.out.println("Banyak: " + matkul.size() + ", pertama: " + matkul.get(0));15 System.out.println("Ada Basis Data? " + matkul.contains("Basis Data"));1617 Collections.sort(matkul);18 for (String m : matkul) {19 System.out.println("- " + m);20 }21 }22}[Algoritma, Matematika Diskrit, Basis Data] Banyak: 3, pertama: Algoritma Ada Basis Data? true - Algoritma - Basis Data - Matematika Diskrit
Generics
Tanda <String> pada ArrayList<String> adalah generics: ArrayList ini hanya boleh berisi String. Kompiler menolak matkul.add(123), sehingga kesalahan tipe tertangkap sebelum program berjalan.
Generics tidak bisa memakai tipe primitif. Untuk bilangan, pakai kelas pembungkusnya: Integer untuk int dan Double untuk double. Java mengubahnya bolak-balik secara otomatis, yang disebut autoboxing.
1import java.util.ArrayList;23public class Main {4 public static void main(String[] args) {5 ArrayList<Integer> nilai = new ArrayList<>();6 for (int n : new int[]{78, 92, 65, 88}) {7 nilai.add(n);8 }9 int total = 0;10 for (int n : nilai) {11 total += n;12 }13 System.out.println("Nilai: " + nilai + ", rata-rata: " + (double) total / nilai.size());14 }15}Nilai: [78, 92, 65, 88], rata-rata: 80.75
Mengurutkan objek dengan Comparator
1import java.util.ArrayList;2import java.util.Comparator;34class Mahasiswa {5 String nama;6 double ipk;78 Mahasiswa(String nama, double ipk) {9 this.nama = nama;10 this.ipk = ipk;11 }12}1314public class Main {15 public static void main(String[] args) {16 ArrayList<Mahasiswa> kelas = new ArrayList<>();17 kelas.add(new Mahasiswa("Bagas", 3.42));18 kelas.add(new Mahasiswa("Sinta", 3.88));19 kelas.add(new Mahasiswa("Dewi", 3.88));20 kelas.add(new Mahasiswa("Fajar", 3.61));2122 kelas.sort(Comparator.comparingDouble((Mahasiswa m) -> m.ipk).reversed()23 .thenComparing(m -> m.nama));24 for (Mahasiswa m : kelas) {25 System.out.println(m.nama + " " + m.ipk);26 }27 }28}Dewi 3.88 Sinta 3.88 Fajar 3.61 Bagas 3.42
m -> m.ipk adalah ekspresi lambda, fungsi kecil tanpa nama. Comparator di atas mengurutkan IPK dari besar ke kecil, lalu nama dari A ke Z jika IPK-nya sama.
HashMap
1import java.util.HashMap;2import java.util.Map;3import java.util.TreeMap;45public class Main {6 public static void main(String[] args) {7 String[] hadir = {"Andi", "Bela", "Andi", "Citra", "Andi", "Bela"};8 Map<String, Integer> hitung = new HashMap<>();9 for (String nama : hadir) {10 hitung.put(nama, hitung.getOrDefault(nama, 0) + 1);11 }12 System.out.println(new TreeMap<>(hitung));13 }14}{Andi=3, Bela=2, Citra=1}HashMap adalah hash table, seperti dictionary di Python. Urutan isinya tidak terjamin, jadi untuk ditampilkan urut abjad, isinya disalin ke TreeMap.
Cek pemahaman
Kenapa ArrayList<int> tidak bisa dipakai di Java?
Latihan
Rekap mata kuliah
Buat ArrayList berisi pasangan nama mata kuliah dan SKS (pakai kelas kecil MataKuliah). Hitung total SKS dan tampilkan mata kuliah dengan SKS terbesar.
Pembahasan
1import java.util.ArrayList;23class MataKuliah {4 String nama;5 int sks;67 MataKuliah(String nama, int sks) {8 this.nama = nama;9 this.sks = sks;10 }11}1213public class Main {14 public static void main(String[] args) {15 ArrayList<MataKuliah> krs = new ArrayList<>();16 krs.add(new MataKuliah("Algoritma", 4));17 krs.add(new MataKuliah("Basis Data", 3));18 krs.add(new MataKuliah("Kalkulus", 3));1920 int total = 0;21 MataKuliah terbesar = krs.get(0);22 for (MataKuliah mk : krs) {23 total += mk.sks;24 if (mk.sks > terbesar.sks) terbesar = mk;25 }26 System.out.println("Total SKS: " + total);27 System.out.println("SKS terbesar: " + terbesar.nama + " (" + terbesar.sks + ")");28 }29}Total SKS: 10 SKS terbesar: Algoritma (4)
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Java online.