KodeGym/Blog Jawa/Acak/TreeMap ing Jawa
John Squirrels
tingkat
San Francisco

TreeMap ing Jawa

Diterbitake ing grup
Yen sampeyan maca artikel iki, sampeyan bisa uga wis ngerti antarmuka Peta lan ing ngendi sampeyan bisa ditrapake kanthi tepat. Yen ora, banjur teka kene . Dina iki kita bakal ngomong babagan fitur implementasine Java TreeMap, lan luwih khusus, kepiye bedane karo HashMap lan cara nggunakake kanthi bener.

Mbandhingake TreeMap, HashMap, lan LinkedHashMap

Implementasi antarmuka Peta sing paling akeh digunakake yaiku HashMap. Gampang digunakake lan njamin akses cepet menyang data, mula iki minangka calon paling apik kanggo ngrampungake akeh masalah. Paling, nanging ora kabeh. Kadhangkala sampeyan kudu nyimpen data kanthi cara terstruktur lan bisa navigasi. Ing kasus iki, implementasine liyane saka antarmuka Peta (TreeMap) teka kanggo ngluwari. TreeMap ngleksanakake antarmuka NavigableMap , sing diwenehi SortedMap , sing dadi warisan antarmuka Peta. Fitur TreeMap - 2Kanthi ngleksanakake antarmuka NavigableMap lan SortedMap , TreeMap nampa fungsi tambahan sing ora kasedhiya ing HashMap, nanging mbayar rega ing babagan kinerja. Ana uga LinkedHashMapclass , sing uga ngidini sampeyan nyimpen data ing urutan tartamtu (urutan sing ditambahake menyang peta). Kanggo mangerteni beda antarane telung kelas kasebut, deleng tabel iki:
HashMap LinkedHashMap TreeMap
Urutan data Acak. Ora ana jaminan manawa pesenan kasebut bakal dijaga kanthi suwe. Ing urutan data sing ditambahake Ing urutan munggah utawa adhedhasar comparator tartamtu
Kerumitan wektu O(1) O(1) O (log(n))
Antarmuka sing dileksanakake peta peta NavigableMap
SortedMap
Map
Struktur data ember ember Wit abang-ireng
Dhukungan kanggo null key? ya wis ya wis Ya, yen sampeyan nggunakake komparator, sing ngidini null
Thread aman? Ora Ora Ora
Kaya sing sampeyan ngerteni, kelas kasebut duwe akeh persamaan, nanging uga ana sawetara bedane. Senajan kelas TreeMap paling Versatile, iku ora bisa tansah nyimpen null minangka tombol. Kajaba iku, ngakses unsur TreeMap mbutuhake wektu paling dawa. Dadi, yen sampeyan ora perlu nyimpen data ing sawetara urutan, luwih becik nggunakake HashMap utawa LinkedHashMap .

Wit abang-ireng

Sampeyan bisa uga ngerteni manawa, ing ngisor tutup, TreeMap nggunakake struktur data sing diarani wit abang-ireng. Nyimpen data ing struktur iki yaiku sing nyedhiyakake urutan data. Dadi wit apa iki? Ayo dipikirake! Bayangake sampeyan kudu nyimpen pasangan Number-String. Nomer 16, 20, 52, 55, 61, 65, 71, 76, 81, 85, 90, 93, lan 101 bakal dadi kunci. Yen sampeyan nyimpen data ing dhaptar tradisional lan sampeyan kudu nemokake unsur kanthi kunci 101, sampeyan kudu ngliwati kabeh 13 unsur kanggo nemokake. Kanggo 13 unsur, iki ora masalah gedhe, nanging nalika nggarap yuta, kita bakal duwe masalah gedhe. Kanggo ngatasi masalah kasebut, programer nggunakake struktur data sing rada rumit. Iki ngendi wit abang ireng mlebu panggung!Fitur TreeMap - 3Panelusuran kanggo unsur wiwit ing ROOT saka wit, kang ing cilik kita 61. Banjur kita mbandhingaké nilai simpul karo nilai sing lagi looking for. Yen regane kurang, banjur menyang sisih kiwa; yen luwih gedhe, banjur kita menyang tengen. Proses iki bola-bali nganti kita nemokake nilai sing dikarepake utawa nemoni unsur sing nilai nol (godhong wit). Werna abang lan ireng digunakake kanggo nyederhanakake navigasi lan ngimbangi wit. Ana aturan sing kudu ditindakake nalika mbangun wit abang-ireng:
  • Oyod kudu ireng.
  • Godhongé wit kudu ireng.
  • A simpul abang kudu loro simpul anak ireng.
  • Node ireng bisa duwe kelenjar anak saka werna apa wae.
  • Sawijining path saka simpul menyang godhong kudu ngemot jumlah simpul ireng sing padha.
  • Node anyar ditambahake ing godhong.
Yen sampeyan nimbang Aturan 3, 4 lan 5 bebarengan, sampeyan bisa ngerti carane werna simpul ngijini kita navigasi wit luwih cepet: path liwat kelenjar ireng tansah luwih cendhek saka siji liwat kelenjar abang. Mulane, ukuran total wit kasebut ditemtokake dening jumlah simpul ireng, sing diarani "dhuwur ireng". Struktur data wit abang-ireng dileksanakake ing macem-macem basa pamrograman. Ana akeh implementasine Jawa ing Internet, mula kita ora bakal ngenteni ing kene. Nanging, ayo terus ngerteni fungsi TreeMap.

Cara sing teka saka antarmuka SortedMap lan NavigableMap

Kaya HashMap, TreeMap ngetrapake antarmuka Peta, tegese TreeMap nduweni kabeh metode sing ana ing HashMap. Nanging TreeMap uga ngetrapake antarmuka SortedMap lan NavigableMap , lan kanthi mangkono entuk fungsi tambahan saka dheweke. SortedMap minangka antarmuka sing nggedhekake Peta lan nambahake metode sing cocog karo kumpulan data sing diurutake:
  • firstKey () : ngasilake kunci saka unsur pisanan ing peta
  • lastKey () : ngasilake kunci saka unsur pungkasan
  • headMap(K end) : ngasilake peta sing ngemot kabeh unsur peta saiki, saka wiwitan nganti unsur kanthi tombol pungkasan
  • tailMap(K start) : ngasilake peta sing ngemot kabeh unsur peta saiki, saka unsur wiwitan nganti pungkasan
  • subMap (K wiwitan, K pungkasan) : ngasilake peta sing ngemot kabeh unsur peta saiki, saka unsur wiwitan kanggo unsur karo mburi tombol.
NavigableMap minangka antarmuka sing ngluwihi SortedMap lan nambah cara kanggo navigasi antarane unsur peta:
  • firstEntry () : ngasilake pasangan nilai-kunci pisanan
  • lastEntry () : ngasilake pasangan nilai kunci pungkasan
  • pollFirstEntry () : ngasilake lan mbusak pasangan pisanan
  • pollLastEntry () : ngasilake lan mbusak pasangan pungkasan
  • ceilingKey(K obj) : ngasilake kunci k paling cilik sing luwih gedhe utawa padha karo tombol obj. Yen ora ana tombol kuwi, bali null
  • floorKey(K obj) : ngasilake k kunci paling gedhe sing kurang saka utawa padha karo tombol obj. Yen ora ana tombol kuwi, bali null
  • lowerKey(K obj) : ngasilake kunci paling gedhe k sing kurang saka tombol obj. Yen ora ana tombol kuwi, bali null
  • higherKey(K obj) : ngasilake kunci k sing paling cilik sing luwih gedhe tinimbang tombol obj. Yen ora ana tombol kuwi, bali null
  • ceilingEntry(K obj) : padha karo metode ceilingKey(K obj), mung ngasilake pasangan kunci-nilai (utawa null)
  • floorEntry(K obj) : padha karo metode floorKey(K obj), mung ngasilake pasangan kunci-nilai (utawa null)
  • lowerEntry(K obj) : padha karo metode lowerKey(K obj), mung ngasilake pasangan kunci-nilai (utawa null)
  • higherEntry(K obj) : padha karo metode higherKey(K obj), mung ngasilake pasangan kunci-nilai (utawa null)
  • descendingKeySet() : ngasilake NavigableSet sing ngemot kabeh tombol sing diurutake kanthi urutan mbalikke
  • descendingMap () : ngasilake NavigableMap sing ngemot kabeh pasangan sing diurutake kanthi urutan mbalikke
  • navigableKeySet () : ngasilake obyek NavigableSet sing ngemot kabeh tombol ing urutan sing disimpen.
  • headMap(K upperBound, boolean incl) : ngasilake peta sing ngemot pasangan saka wiwitan kanggo unsur upperBound. Parameter incl nuduhake apa kudu kalebu unsur upperBound ing peta bali
  • tailMap(K lowerBound, boolean incl) : fungsi sing padha karo cara sadurunge, mung ngasilake pasangan saka lowerBound nganti pungkasan
  • subMap(K lowerBound, boolean lowIncl, K upperBound, boolean highIncl) : kaya cara sadurunge, ngasilake pasangan saka lowerBound menyang upperBound; bantahan lowIncl lan highIncl nuduhake apa kalebu unsur wates ing peta anyar.
Saliyane konstruktor biasanipun, TreeMap wis konstruktor liyane sing nampa Kayata saka comparator a. Comparator iki tanggung jawab kanggo urutan kang unsur disimpen.

Tuladha TreeMap

Cara ekstra sing akeh iki bisa uga katon ora perlu, nanging dadi luwih migunani tinimbang sing sampeyan ngerteni nalika sepisanan. Ayo padha nliti conto ing ngisor iki. Bayangake yen kita kerja ing departemen pemasaran perusahaan gedhe, lan kita duwe database wong sing pengin dituduhake iklan. Ana rong rincian sing kudu dielingi:
  • Kita kudu nglacak jumlah tayangan kanggo saben wong
  • Algoritma kanggo nampilake iklan kanggo bocah cilik beda.
Ayo nggawe kelas Person , sing bakal nyimpen kabeh informasi sing relevan babagan saben wong:
public class Person {
   public String firstName;
   public String lastName;
   public int age;

   public Person(String firstName, String lastName, int age) {
       this.firstName = firstName;
       this.lastName = lastName;
       this.age = age;
   }
}
Kita ngetrapake logika ing kelas Utama :
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

public class Main {
   public static void main(String[] args) {
      TreeMap<Person, Integer> map = new TreeMap<>(Comparator.comparingInt(o -> o.age));
      map.put(new Person("John", "Smith", 17), 0);
      map.put(new Person("Ivan", "Petrenko", 65), 0);
      map.put(new Person("Pedro", "Escobar", 32), 0);
      map.put(new Person("Shirley", "Hatfield", 14), 0);
      map.put(new Person("Abby", "Parsons", 19), 0);

      Person firstAdultPerson = map.navigableKeySet().stream().filter(person -> person.age>18).findFirst().get();

       Map<Person, Integer> youngPeopleMap = map.headMap(firstAdultPerson, false);
       Map<Person, Integer> adultPeopleMap = map.tailMap(firstAdultPerson, true);
       showAdvertisementToYoung(youngPeopleMap);
       showAdvertisementToAdult(adultPeopleMap);
   }

   public static void showAdvertisementToYoung(Map map) {}
   public static void showAdvertisementToAdult(Map map) {}
}
Ing kelas Utama, nggawe TreeMap, ing ngendi saben tombol makili wong tartamtu, lan saben nilai minangka jumlah tayangan iklan ing sasi iki. We pass konstruktor comparator sing ngurutake wong miturut umur. Kita ngisi peta kanthi nilai sewenang-wenang. Saiki kita pengin njaluk referensi kanggo wong diwasa pisanan ing repositori data cilik kita. Kita nindakake iki nggunakake Stream API. Banjur kita entuk rong peta sing kapisah, sing diterusake menyang cara sing nuduhake iklan. Ana akeh, akeh cara kita bisa ngrampungake tugas iki. Arsenal metode kelas TreeMap ngidini kita nggawe solusi khusus kanggo saben kabutuhan. Sampeyan ora perlu ngelingi kabeh, amarga sampeyan bisa tansah nggunakake dokumentasi utawa tips saka IDE. Kanggo nguatake apa sing sampeyan sinau, disaranake sampeyan nonton video pelajaran saka Kursus Jawa
Sing kabeh kanggo saiki! Muga-muga kelas TreeMap wis jelas kanggo sampeyan saiki, lan sampeyan bakal ngetrapake kanthi bener kanggo ngrampungake tugas coding praktis.
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar