Subpeta dan Paparan Julat
Ekstrak paparan subMap, headMap dan tailMap untuk carian berasaskan julat dalam peta tersusun.
Subpeta dan Paparan Julat ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Paparan Julat dalam TreeMap
subMap, headMap dan tailMap TreeMap mengembalikan paparan yang disokong — perubahan pada peta asas dan sebaliknya akan dicerminkan pada paparan tersebut. Perubahan melalui paparan akan dicerminkan pada peta asal.
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= 10; i++) map.put(i * 10, "item" + i);
var view = map.subMap(30, 70); // [30, 70)
System.out.println(view); // {30=item3, 40=item4, 50=item5, 60=item6}
map.put(45, "new"); // also visible through view!
System.out.println(view.containsKey(45)); // trueheadMap: Kunci di Bawah Sempadan
headMap(toKey) mengembalikan semua entry dengan kunci yang lebih kecil daripada toKey secara ketat. Gunakan varian inklusif headMap(toKey, true) untuk memasukkan sempadan tersebut.
TreeMap<String, Integer> words = new TreeMap<>();
"banana cherry apple date elderberry".chars()
.mapToObj(c -> String.valueOf((char)c)).distinct()
.forEach(w -> words.put(w, w.length()));
// Actually let's use real words:
TreeMap<String, Integer> wc = new TreeMap<>();
wc.put("apple",5); wc.put("banana",6); wc.put("cherry",6); wc.put("date",4);
System.out.println(wc.headMap("cherry")); // {apple=5, banana=6}tailMap: Kunci Bermula dari Sempadan
tailMap(fromKey) mengembalikan semua entry dengan kunci ≥ fromKey.
TreeMap<Integer, String> grades = new TreeMap<>();
grades.put(50,"F"); grades.put(60,"D"); grades.put(70,"C"); grades.put(80,"B"); grades.put(90,"A");
// All passing grades (>= 60)
var passing = grades.tailMap(60);
System.out.println(passing); // {60=D, 70=C, 80=B, 90=A}subMap dengan Sempadan Inklusif
subMap(from, fromInclusive, to, toInclusive) dengan 4 argumen memberikan kawalan penuh terhadap keterangkuman sempadan:
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 10; i <= 100; i += 10) map.put(i, "v"+i);
// [30, 60] — both inclusive
System.out.println(map.subMap(30, true, 60, true));
// {30=v30, 40=v40, 50=v50, 60=v60}
// (30, 60) — both exclusive
System.out.println(map.subMap(30, false, 60, false));
// {40=v40, 50=v50}Mengubah Suai melalui Paparan
Operasi put/remove pada paparan subMap dicerminkan pada peta asal (dan sebaliknya). Percubaan untuk menyisipkan kunci di luar julat paparan akan mencetuskan pengecualian.
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= 5; i++) map.put(i * 10, "v" + i);
var view = map.subMap(20, 40); // [20, 40)
view.remove(20); // removes from both view and original map
System.out.println(map.containsKey(20)); // false
// This would throw IllegalArgumentException:
// view.put(50, "out of range");Kes Penggunaan: Pertanyaan Julat Rekod
Dapatkan semua entri rekod antara dua cap masa menggunakan paparan julat TreeMap:
import java.time.*;
TreeMap<LocalDateTime, String> logs = new TreeMap<>();
logs.put(LocalDateTime.of(2024,1,1,8,0), "Server start");
logs.put(LocalDateTime.of(2024,1,1,10,0), "Request spike");
logs.put(LocalDateTime.of(2024,1,1,14,0), "Maintenance");
logs.put(LocalDateTime.of(2024,1,1,18,0), "Server stop");
var morning = logs.subMap(
LocalDateTime.of(2024,1,1,8,0), true,
LocalDateTime.of(2024,1,1,12,0), false
);
morning.forEach((t,m) -> System.out.println(t+" : "+m));Kes Penggunaan: Carian Julat Harga
Cari semua produk dalam julat harga menggunakan kunci TreeMap sebagai harga:
TreeMap<Double, String> products = new TreeMap<>();
products.put(9.99, "Pen");
products.put(24.99, "Book");
products.put(49.99, "Headphones");
products.put(299.99, "Tablet");
double min = 10.0, max = 100.0;
var affordable = products.subMap(min, true, max, true);
affordable.forEach((p,n) -> System.out.println(n+" $"+p));
// Book $24.99, Headphones $49.99SubMap Menurun
Rantaikan descendingMap() pada paparan untuk navigasi dalam susunan terbalik:
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 10; i <= 100; i += 10) map.put(i, "v"+i);
// Get [40, 80] in descending order
map.subMap(40, true, 80, true)
.descendingMap()
.forEach((k,v) -> System.out.println(k + "=" + v));
// 80=v80, 70=v70, 60=v60, 50=v50, 40=v40Antara Muka NavigableMap
NavigableMap melanjutkan SortedMap dan menambahkan navigasi kunci ceiling/floor/higher/lower serta paparan menurun. TreeMap ialah pelaksanaan yang paling biasa; ConcurrentSkipListMap ialah alternatif yang selamat untuk utas.
Prestasi Paparan
Operasi paparan subpeta (get, put, containsKey) mempunyai kerumitan O(log n) yang sama seperti TreeMap asas. Penciptaan paparan itu sendiri ialah O(1) — tiada penyalinan berlaku. Imbasan julat terhadap n kunci dalam paparan ialah O(log N + n), dengan N sebagai saiz keseluruhan peta.
Perangkap: Paparan Lapuk
Oleh sebab paparan disokong oleh peta asal, paparan boleh menjadi kosong atau mencetuskan pengecualian jika peta asal dikosongkan. Sentiasa dokumentasikan bahawa paparan adalah dinamik dan jangan simpannya melebihi kitar hayat yang dimaksudkan.
TreeMap<Integer, String> map = new TreeMap<>();
map.put(10, "a"); map.put(20, "b"); map.put(30, "c");
var view = map.subMap(10, 30);
map.clear(); // view becomes empty
System.out.println(view.size()); // 0 — but no exceptionSemakan Pantas
Anda memanggil map.subMap(30, false, 70, true) pada TreeMap dengan kunci {10,20,30,40,50,60,70,80}. Kunci yang manakah disertakan dalam hasilnya?
Imbas Kembali: Subpeta dan Paparan Julat
Perkara penting:
- subMap, headMap dan tailMap mengembalikan paparan langsung yang disokong — tiada penyalinan
- Perubahan pada paparan dicerminkan pada peta asal dan sebaliknya
- subMap(from, fromInclusive, to, toInclusive) dengan 4 argumen untuk kawalan penuh terhadap sempadan
- put di luar julat melalui paparan mencetuskan IllegalArgumentException
- Kerumitan imbasan julat: O(log N + n)
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Subpeta dan Paparan Julat” percuma?
Ya — teks penuh “Subpeta dan Paparan Julat” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Subpeta dan Paparan Julat”?
Ekstrak paparan subMap, headMap dan tailMap untuk carian berasaskan julat dalam peta tersusun. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Subpeta dan Paparan Julat” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- TreeMap: Pasangan Kunci-Nilai Tersusun
- Subpeta dan Paparan Julat
- TreeSet dan NavigableSet
- Susunan Tersuai dalam Koleksi Tree