Mempraktikkan Pengurutan Array dan Koleksi
Terapkan pengurutan pada daftar produk, papan peringkat, dan jadwal acara menggunakan contoh dunia nyata.
Mempraktikkan Pengurutan Array dan Koleksi adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Pengurutan dalam Praktik
Pelajaran ini menerapkan teknik pengurutan pada skenario realistis: katalog produk, papan peringkat, penjadwalan acara, dan pemeringkatan hasil pencarian.
Arrays.sort untuk Larik Primitif
Arrays.sort() untuk larik primitif menggunakan quicksort pivot ganda — sangat cepat, dengan rata-rata O(n log n).
int[] scores = {45, 90, 78, 62, 88, 33};
Arrays.sort(scores);
System.out.println(Arrays.toString(scores)); // [33, 45, 62, 78, 88, 90]
// Sort a range only
int[] data = {9, 3, 7, 1, 5};
Arrays.sort(data, 1, 4); // sort indices 1-3 only
System.out.println(Arrays.toString(data)); // [9, 1, 3, 7, 5]Arrays.sort untuk Larik Objek
Untuk larik objek, Arrays.sort() menggunakan TimSort (stabil). Anda dapat memberikan Comparator untuk menentukan urutan khusus.
String[] names = {"Charlie", "Alice", "Bob", "Diana"};
Arrays.sort(names);
System.out.println(Arrays.toString(names)); // [Alice, Bob, Charlie, Diana]
// Custom order: by length, then alphabetically
Arrays.sort(names, Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()));
System.out.println(Arrays.toString(names)); // [Bob, Alice, Diana, Charlie]Collections.sort dan List.sort
Keduanya mengurutkan List secara langsung. List.sort() adalah cara modern yang lebih disarankan.
List<Integer> nums = new ArrayList<>(List.of(5, 2, 8, 1, 9, 3));
// Old way
Collections.sort(nums);
System.out.println(nums); // [1, 2, 3, 5, 8, 9]
// Modern way (same result)
nums.sort(Comparator.naturalOrder());
nums.sort(null); // null means natural order
// Descending
nums.sort(Comparator.reverseOrder());
System.out.println(nums); // [9, 8, 5, 3, 2, 1]Stream.sorted() untuk Gaya Fungsional
Gunakan stream().sorted() saat membangun pipeline — metode ini menghasilkan stream baru yang terurut tanpa mengubah sumbernya.
List<String> cities = List.of("Tokyo", "London", "New York", "Paris", "Sydney");
// Sorted stream — source list unchanged
List<String> sorted = cities.stream()
.sorted(Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()))
.collect(Collectors.toList());
System.out.println(sorted);
// [Paris, Tokyo, London, Sydney, New York]Mengurutkan Peta Berdasarkan Nilai
Pertanyaan wawancara klasik: mengurutkan peta berdasarkan nilainya menggunakan stream dan Comparator.
import java.util.*;
import java.util.stream.*;
Map<String, Integer> scores = Map.of(
"Alice", 95, "Bob", 87, "Charlie", 92, "Diana", 87
);
Map<String, Integer> sorted = scores.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue(Comparator.reverseOrder())
.thenComparing(Map.Entry.comparingByKey()))
.collect(Collectors.toLinkedHashMap(
Map.Entry::getKey, Map.Entry::getValue,
(v1, v2) -> v1, LinkedHashMap::new));
sorted.forEach((k, v) -> System.out.println(k + ": " + v));
// Alice: 95 / Charlie: 92 / Bob: 87 / Diana: 87Mengurutkan dengan Collator untuk Lokal
Untuk pengurutan string yang memperhatikan bahasa, gunakan java.text.Collator sebagai pengganti String.compareTo — metode ini menangani aksen, huruf besar-kecil, dan urutan khusus suatu lokal.
import java.text.*;
import java.util.*;
List<String> names = new ArrayList<>(List.of("éclair", "apple", "Über", "banana"));
Collator collator = Collator.getInstance(Locale.GERMAN);
names.sort(collator);
System.out.println(names); // locale-aware sortMengurutkan Objek dengan Beberapa Kriteria
Pengurutan produk perdagangan elektronik: produk yang tersedia terlebih dahulu, kemudian berdasarkan salePrice, lalu berdasarkan peringkat, dan terakhir berdasarkan nama.
record Product(String name, double price, double salePrice, double rating, boolean inStock) {}
Comparator<Product> bestFirst = Comparator
.comparing(Product::inStock).reversed() // in-stock first
.thenComparingDouble(Product::salePrice) // cheapest sale price
.thenComparingDouble(Product::rating).reversed() // highest rated
.thenComparing(Product::name); // alphabetical tiebreakMengurutkan Acara Berdasarkan Tanggal dan Waktu
Mengurutkan jadwal acara secara kronologis menggunakan tipe java.time yang mengimplementasikan Comparable.
import java.time.*;
import java.util.*;
record Event(String title, LocalDate date, LocalTime time) {}
List<Event> schedule = new ArrayList<>(List.of(
new Event("Workshop", LocalDate.of(2024,7,15), LocalTime.of(9, 0)),
new Event("Keynote", LocalDate.of(2024,7,14), LocalTime.of(10, 30)),
new Event("Lunch Talk",LocalDate.of(2024,7,15), LocalTime.of(12, 0)),
new Event("Hackathon", LocalDate.of(2024,7,14), LocalTime.of(9, 0))
));
schedule.sort(Comparator.comparing(Event::date).thenComparing(Event::time));
schedule.forEach(e -> System.out.println(e.date() + " " + e.time() + " " + e.title()));Elemen N Teratas dengan Pengurutan
Menemukan N elemen teratas secara efisien: urutkan secara menurun lalu ambil N elemen pertama, atau gunakan PriorityQueue untuk kumpulan data besar.
List<Integer> values = List.of(42, 17, 88, 5, 73, 56, 91, 33);
// Simple approach: sort descending, take first 3
List<Integer> top3 = values.stream()
.sorted(Comparator.reverseOrder())
.limit(3)
.collect(Collectors.toList());
System.out.println(top3); // [91, 88, 73]
// For very large datasets: PriorityQueue min-heap approach is O(n log k)
import java.util.PriorityQueue;
PriorityQueue<Integer> heap = new PriorityQueue<>(3);
for (int v : values) {
heap.offer(v);
if (heap.size() > 3) heap.poll();
}
System.out.println(new TreeSet<>(heap).descendingSet()); // [73, 88, 91]Deduplikasi dengan Pengurutan
Setelah diurutkan, elemen duplikat akan bersebelahan — pendeteksian dalam O(n) dapat dilakukan.
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5};
Arrays.sort(arr); // sort first
// Remove duplicates in O(n) after sorting
int[] unique = Arrays.stream(arr).distinct().toArray();
System.out.println(Arrays.toString(unique)); // [1, 2, 3, 4, 5, 6, 9]Kinerja: Memilih Metode Pengurutan
Memilih pendekatan pengurutan yang tepat:
- Larik primitif: Arrays.sort() — tercepat, quicksort di tempat
- Larik atau daftar objek dengan Comparable: Collections.sort() atau List.sort(null)
- Beberapa urutan: rangkaian Comparator dengan thenComparing
- N teratas dari stream besar: PriorityQueue atau Stream.sorted().limit(N)
Pemeriksaan Singkat
Algoritma pengurutan apa yang digunakan Java untuk larik objek dalam Arrays.sort()?
Ringkasan: Mengurutkan Larik dan Koleksi dalam Praktik
Poin-poin utama:
- Arrays.sort() untuk primitif menggunakan quicksort pivot ganda; untuk objek menggunakan TimSort (stabil)
- List.sort(pembanding) dan Collections.sort() sama-sama menggunakan TimSort yang stabil
- stream().sorted() menghasilkan stream baru yang terurut tanpa mengubah sumbernya
- Mengurutkan peta berdasarkan nilai: entrySet().stream().sorted(peta.Entry.comparingByValue())
- Gunakan Collator untuk pengurutan string yang memperhatikan lokal
- Untuk N teratas dari data besar: PriorityQueue dengan kapasitas k lebih efisien daripada pengurutan penuh
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mempraktikkan Pengurutan Array dan Koleksi” gratis?
Ya — teks lengkap “Mempraktikkan Pengurutan Array dan Koleksi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mempraktikkan Pengurutan Array dan Koleksi”?
Terapkan pengurutan pada daftar produk, papan peringkat, dan jadwal acara menggunakan contoh dunia nyata. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Mempraktikkan Pengurutan Array dan Koleksi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Interface Comparable
- Pengurutan dengan Comparator dan Lambda
- Pengurutan Berdasarkan Banyak Kunci dengan thenComparing
- Mempraktikkan Pengurutan Array dan Koleksi