0Pricing
Java Academy · Pelajaran

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: 87

Mengurutkan 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 sort

Mengurutkan 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 tiebreak

Mengurutkan 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

  1. Interface Comparable
  2. Pengurutan dengan Comparator dan Lambda
  3. Pengurutan Berdasarkan Banyak Kunci dengan thenComparing
  4. Mempraktikkan Pengurutan Array dan Koleksi
← Kembali ke Java Academy