TreeSet dan NavigableSet
Simpan elemen unik yang terurut dan gunakan floor, ceiling, higher, serta lower untuk mencari elemen terdekat.
TreeSet dan NavigableSet adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Apa itu TreeSet?
TreeSet adalah set terurut yang didukung oleh pohon Merah-Hitam. Set ini menyimpan elemen unik dalam urutan alami menaik (atau berdasarkan comparator yang diberikan). Semua operasi memiliki kompleksitas O(log n).
import java.util.TreeSet;
TreeSet<String> names = new TreeSet<>();
names.add("Charlie");
names.add("Alice");
names.add("Bob");
names.add("Alice"); // duplicate ignored
for (String s : names) System.out.print(s + " ");
// Alice Bob CharlieMetode NavigableSet: floor, ceiling, lower, higher
TreeSet mengimplementasikan NavigableSet dan menyediakan metode navigasi untuk menemukan elemen terdekat:
TreeSet<Integer> set = new TreeSet<>();
for (int i = 10; i <= 50; i += 10) set.add(i);
// {10, 20, 30, 40, 50}
System.out.println(set.floor(25)); // 20 (greatest ≤ 25)
System.out.println(set.ceiling(25)); // 30 (smallest ≥ 25)
System.out.println(set.lower(30)); // 20 (strictly less)
System.out.println(set.higher(30)); // 40 (strictly greater)first, last, pollFirst, pollLast
Akses atau hapus elemen pada batas:
TreeSet<String> ts = new TreeSet<>(Set.of("cherry","apple","banana","date"));
System.out.println(ts.first()); // apple
System.out.println(ts.last()); // date
System.out.println(ts.pollFirst()); // apple (removed)
System.out.println(ts.pollLast()); // date (removed)
System.out.println(ts); // [banana, cherry]headSet, tailSet, subSet
Ekstrak tampilan subset yang terurut:
TreeSet<Integer> set = new TreeSet<>(Set.of(1,2,3,4,5,6,7,8,9,10));
System.out.println(set.headSet(5)); // [1, 2, 3, 4]
System.out.println(set.tailSet(7)); // [7, 8, 9, 10]
System.out.println(set.subSet(3, 7)); // [3, 4, 5, 6]
// Inclusive upper bound:
System.out.println(set.subSet(3, true, 7, true)); // [3,4,5,6,7]Iterasi Menurun
Gunakan descendingIterator() atau descendingSet() untuk urutan terbalik:
TreeSet<Integer> ts = new TreeSet<>(Set.of(1,3,5,7,9));
// Descending iterator
var it = ts.descendingIterator();
while (it.hasNext()) System.out.print(it.next() + " ");
// 9 7 5 3 1Pengurutan Khusus melalui Comparator
Teruskan Comparator untuk mengurutkan berdasarkan urutan nonalami—misalnya, string terpanjang terlebih dahulu:
TreeSet<String> byLength = new TreeSet<>(
Comparator.comparingInt(String::length)
.thenComparing(Comparator.naturalOrder())
);
byLength.add("Hi");
byLength.add("Hello");
byLength.add("Hey");
byLength.add("Java");
for (String s : byLength) System.out.print(s + " ");
// Hi Hey Java HelloKasus Penggunaan: Nama Pengguna Unik yang Terurut
Simpan nama pengguna dalam TreeSet untuk menghapus duplikat secara otomatis dan mempertahankan urutan alfabet:
TreeSet<String> users = new TreeSet<>();
users.add("alice");
users.add("bob");
users.add("alice"); // ignored
users.add("carol");
System.out.println(users.first()); // alice
System.out.println(users); // [alice, bob, carol]Kasus Penggunaan: Penghitungan Rentang
Hitung elemen dalam suatu rentang menggunakan subSet:
TreeSet<Integer> scores = new TreeSet<>();
for (int s : new int[]{45,62,78,55,90,88,34,71}) scores.add(s);
// Scores between 60 and 89 (inclusive)
int count = scores.subSet(60, true, 89, true).size();
System.out.println("Students in B range: " + count); // 3 (62, 78, 88... wait: 62,78,71,88=4)
// Actually: 62,71,78,88 = 4TreeSet vs HashSet vs LinkedHashSet
Pilih berdasarkan kebutuhan:
- HashSet: operasi O(1), tidak berurutan
- LinkedHashSet: operasi O(1), berdasarkan urutan penyisipan
- TreeSet: operasi O(log n), urutan terurut, dan metode navigasi
TreeSet mengharuskan elemen mengimplementasikan Comparable atau sebuah Comparator.
Elemen Null
TreeSet TIDAK mengizinkan elemen null saat menggunakan urutan alami—NullPointerException akan ditimbulkan karena null tidak dapat dibandingkan. Comparator khusus yang menangani null secara eksplisit dapat digunakan.
TreeSet<String> ts = new TreeSet<>();
try {
ts.add(null); // throws NullPointerException
} catch (NullPointerException e) {
System.out.println("Cannot add null: " + e);
}Keamanan Thread
TreeSet TIDAK aman untuk thread. Sinkronkan dari luar menggunakan Collections.synchronizedSortedSet(), atau gunakan ConcurrentSkipListSet yang terurut sekaligus aman untuk thread.
Pemeriksaan Singkat
Sebuah TreeSet<Integer> berisi {10, 20, 30, 40, 50}. Apa yang dikembalikan oleh set.ceiling(35)?
Ringkasan: TreeSet dan NavigableSet
Inti penting:
- TreeSet menyimpan elemen unik yang terurut (O(log n))
- Mengimplementasikan NavigableSet: floor, ceiling, lower, higher, first, last
- headSet, tailSet, subSet mengembalikan tampilan rentang yang didukung
- Gunakan descendingSet()/descendingIterator() untuk urutan terbalik
- Tidak aman untuk thread—gunakan ConcurrentSkipListSet untuk akses bersamaan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “TreeSet dan NavigableSet” gratis?
Ya — teks lengkap “TreeSet dan NavigableSet” 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 “TreeSet dan NavigableSet”?
Simpan elemen unik yang terurut dan gunakan floor, ceiling, higher, serta lower untuk mencari elemen terdekat. 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 3 dari 4.
Berapa lama pelajaran “TreeSet dan NavigableSet” 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
- TreeMap: Pasangan Kunci-Nilai Terurut
- Submap dan Tampilan Rentang
- TreeSet dan NavigableSet
- Pengurutan Kustom pada Koleksi Tree