Bu makalany okaýan bolsaňyz, Karta interfeýsi we ulanylyşy bilen tanyş bolmagyňyz mümkin . Notok bolsa, şu ýere gidersiň. Bu gün “TreeMap” -yň durmuşa geçiriş aýratynlyklary, has takygy, “HashMap” -dan nähili tapawudy we ony nädip dogry ulanmalydygy barada gürleşeris .
Görşüňiz ýaly, bu synplaryň köp umumylygy bar, ýöne käbir tapawutlaram bar. Synp iň köp wezipeli bolsa-da , elmydama açar hökmünde
Gerekli elementi gözlemek agajyň kökünden başlaýar, biziň ýagdaýymyzda 61 bolýar. Soňra zerur baha bilen deňeşdirilýär. Gymmatlygymyz az bolsa, çepe gidýäris, has köp bolsa sag tarapa gidýäris. Bu, zerur bahany tapýançak ýa-da gymmaty bolan bir elementi
TreeMap, HashMap we LinkedHashMap deňeşdirmek
Karta interfeýsiniň iň köp ulanylýan ýerine ýetirilişi HashMap . Ulanmak aňsat we maglumatlaryň çalt elýeterliligini kepillendirýär we ony köp meseleler üçin iň gowy kandidat edýär. Köp, ýöne hemmesi däl. Käwagt maglumatlaryň üstünden geçmek ukyby bilen gurluşly görnüşde saklamak zerur bolýar. Bu ýagdaýda Karta interfeýsiniň başga bir durmuşa geçirilmegi - TreeMap kömek edýär . TreeMap , SortedMap- dan miras galan NavigableMap interfeýsini amala aşyrýar , bu bolsa öz gezeginde Karta interfeýsinden miras alýar . “NavigableMap” we “SortedMap” interfeýslerini ýerine ýetirmek bilen , “TreeMap” “HashMap” -yň ýerine ýetirmeýän goşmaça funksiýasyna eýe bolýar , ýöne bu öndürijilik nukdaýnazaryndan bahadan çykýar. Şeýle hem, LinkedHashMap synpy bar , bu hem maglumatlary belli bir tertipde - goşulan tertipde saklamaga mümkinçilik berýär. Bu üç synpyň arasyndaky tapawutlara düşünmäge kömek etmek üçin şu tablisa serediň:HashMap | LinkedHashMap | TreeMap | |
---|---|---|---|
Maglumatlary saklamagyň tertibi | Tötänleýin. Wagtyň geçmegi bilen buýrugyň saklanjakdygyna kepillik ýok. | Goşmak üçin | Asma tertipde ýa-da berlen deňeşdirijä esaslanýar |
Elementiň giriş wagty | O (1) | O (1) | O (log (n)) |
Geçirilen interfeýsler | Karta | Karta | NavigableMap SortedMap kartasy |
Maglumat gurluşyna esaslanýan durmuşa geçirmek | Çelekler | Çelekler | Gyzyl-gara agaç |
Null düwmeler bilen işlemek ukyby | Bolup biler | Bolup biler | Nul bermäge mümkinçilik berýän deňeşdiriji ulansaňyz mümkindir |
Tekst ygtybarly | .Ok | .Ok | .Ok |
TreeMap
saklanyp bilinmez . null
Mundan başga-da, TreeMap elementlerine giriş wagty iň uzyn bolar. Şonuň üçin maglumatlary tertipli görnüşde saklamak zerurlygy ýok bolsa, ulanmak has gowudyr HashMap
ýa-da LinkedHashMap
.
Gyzyl reňkli agaç
Üns beren bolsaňyz, kapotyň aşagyndaTreeMap
gyzyl-gara agaç diýilýän maglumat gurluşy ulanylýar. Maglumatlaryň bu tertipde saklanmagy, maglumatlaryň saklanyş tertibini üpjün edýär. Bu agaç näme? Geliň, düşüneliň! “Number-String” jübütlerini saklamalydygyny göz öňüne getiriň. 16, 20, 52, 55, 61, 65, 71, 76, 81, 85, 90, 93, 101 sanlar açar bolar. Maglumatlary adaty sanawda saklasaňyz we 101 açary bolan bir element tapmaly bolsaňyz, ony tapmak üçin 13 elementiň hemmesini gaýtalamaly bolarsyňyz. 13 element üçin bu möhüm däl, million bilen işlänimizde uly kynçylyklar ýüze çykar. Şeýle meseleleri çözmek üçin programmistler birneme çylşyrymly maglumat gurluşlaryny ulanýarlar. Şonuň üçin gyzyl-gara agaç bilen tanyş!
https://algorithmtutor.com/Data-Structures/Tree/Red-Black-Trees/
null
(agajyň ýapragy) urýançak bolýar. Agajyň ýöremegini we deňagramlylygyny aňsatlaşdyrmak üçin gyzyl we gara reňkler ulanylýar. Gyzyl-gara agaç gurlanda hemişe berjaý edilmeli düzgünler bar:
- Kök gara reňkli bolmaly.
- Agajyň ýapraklary gara bolmaly.
- Gyzyl düwünde iki sany gara çaga düwünleri bolmaly.
- Gara düwünde islendik çaga düwünleri bolup biler.
- Düwünden ýapraklaryna barýan ýolda şol bir mukdarda gara düwün bolmaly.
- Leavesapraklaryň ýerine täze düwünler goşulýar.
TreeMap
.
SortedMap we NavigableMap interfeýslerinden alnan usullar
Halaýan ýalyHashMap
, TreeMap
interfeýsi ýerine ýetirýär , bu onuň ähli usullarynyň bardygyny Map
aňladýar . Mundan başga-da, interfeýsleri amala aşyrýar we olardan goşmaça funksiýa alýar. - tertipleşdirilen maglumatlar toplumyna degişli usullary giňeldýän we goşýan interfeýs :TreeMap
HashMap
TreeMap
SortedMap
NavigableMap
SortedMap
Map
firstKey()
: kartanyň birinji elementiniň açaryny yzyna berýär;lastKey()
: soňky elementiň açaryny yzyna berýär;headMap(K end)
: häzirki elementiň ähli elementlerini öz içine alýan kartany, başyndan elemente açar bilen gaýtaryp berýärend
;tailMap(K start)
: häzirki elementiň ähli elementlerini öz içine alýan kartany, elementden başlapstart
, soňuna çenli gutarýar;subMap(K start, K end)
start
: elementden başlap, element bilen açar bilen gutarýan häzirki elementiň hemmesini öz içine alýan kartany görkezýärend
.
NavigableMap
SortedMap
- karta elementleriniň arasynda nawigasiýa usullaryny giňeldýän we goşýan interfeýs :
firstEntry()
: ilkinji açar bahasy jübütini yzyna berýär;lastEntry()
: iň soňky açar-baha jübütini yzyna berýär;pollFirstEntry()
: gaýdyp gelýär we birinji jübüti aýyrýar;pollLastEntry()
: gaýdyp gelýär we soňky jübüti aýyrýar;ceilingKey(K obj)
: Düwmeleriň garşysyndan uly ýa-da deň bolan iň kiçi k k gaýtarýar. Şeýle açar ýok bolsa, null gaýdyp gelýär;floorKey(K obj)
: Düwmeleriň garşysyndan az ýa-da deň bolan iň uly açary k görkezýär. Şeýle açar ýok bolsa, null gaýdyp gelýär;lowerKey(K obj)
: Düwmeleriň garşysyndan has kiçi k düwmesini görkezýär. Şeýle açar ýok bolsa, null gaýdyp gelýär;higherKey(K obj)
: Düwmeleriň garşysyndan uly bolan iň kiçi k k gaýtarýar. Şeýle açar ýok bolsa, null gaýdyp gelýär;ceilingEntry(K obj)
: potolokKey (K obj) usulyna meňzeýär, ýöne açar bahaly jübüti (ýa-da null) gaýtaryp berýär;floorEntry(K obj)
: polKey (K obj) usulyna meňzeýär, ýöne açar bahaly jübüti (ýa-da null) gaýtaryp berýär;lowerEntry(K obj)
: lowerKey (K obj) usulyna meňzeýär, ýöne açar bahaly jübüti (ýa-da null) gaýtaryp berýär;higherEntry(K obj)
: has ýokaryKey (K obj) usulyna meňzeýär, ýöne açar bahaly jübüti (ýa-da null) gaýtaryp berýär;descendingKeySet()
: ters tertipde tertiplenen ähli düwmeleri öz içine alýan NavigableSet-i yzyna berýär;descendingMap()
: ters tertipde tertiplenen ähli jübütleri öz içine alýan NavigableMap-y gaýtarýar;navigableKeySet()
: saklamak tertibinde ähli düwmeleri öz içine alýan NavigableSet obýektini yzyna berýär;headMap(K upperBound, boolean incl)
: başyndan ýokarkyBound elementine jübütleri öz içine alýan kartany gaýtaryp berýär. Goşma argumenti, ýokarkyBound elementiniň yzyna gaýdyp gelen kartada goşulmalydygyny ýa-da ýokdugyny kesgitleýär;tailMap(K lowerBound, boolean incl)
: işleýşi öňki usula meňzeýär, diňe “LowBound” -dan ahyryna çenli jübütler yzyna gaýtarylýar;subMap(K lowerBound, boolean lowIncl, K upperBound, boolean highIncl)
: Öňki usullarda bolşy ýaly, aşakyBound-dan upperBound-a çenli jübütler yzyna gaýtarylýar, täze kartada serhet elementlerini goşmalydygyny görkezýän lowIncl we highIncl argumentleri.
TreeMap
, tanyş konstruktorlarymyzdan başga-da, deňeşdirijiniň mysalyny kabul edýän ýene biri goşuldy. Bu deňeşdiriji elementleriň saklanyş tertibi üçin jogapkärçilik çeker.
TreeMap ulanmagyň mysallary
Şeýle goşmaça usullaryň köp bolmagy zerur däl ýaly bolup görünse-de, köplenç başda görünişinden has peýdaly bolup çykýar. Geliň, bu mysaly siziň bilen göreliň. Uly bir kompaniýanyň marketing bölüminde işleýändigimizi we mahabat görkezmek isleýän adamlarymyzyň maglumatlar bazasynyň bardygyny göz öňüne getiriň. Munuň iki nuansy bar:- her adama täsirleriň sanyny yzarlamalydyrys;
- Kämillik ýaşyna ýetmediklere mahabat görkezmek algoritmi başga.
Person
Bir adam hakda bize bar bolan ähli maglumatlary saklaýan synp döredeliň :
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;
}
}
Logikany synpda durmuşa geçirýäris Main
:
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("Radion", "Pyatkin", 14), 0);
map.put(new Person("Sergey", "Vashkevich", 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){}
}
Main
Döredýän synpymyzda TreeMap
, key
belli bir adam nirede we value
bu aýda mahabat täsirleriniň sany. Konstruktorda adamlary ýaşy boýunça tertipleşdirjek deňeşdirijiden geçýäris. Tötänleýin bahalar bilen dolduryň map
. Indi kiçi maglumat dükanymyzdaky ilkinji ululara salgylanma almaly. Muny Stream API ulanyp edýäris. Ondan soň mahabaty görkezýän usullara geçýän iki sany garaşsyz karta alarys. Bu meseläni çözmegiň köp, köp usuly bar. Synpyň arsenaly, TreeMap
her tagamyna laýyk çözgütleri oýlap tapmaga mümkinçilik berýär. Olaryň hemmesini ýatda saklamak hökman däl, sebäbi resminamalary ýa-da ösüş gurşawyndaky görkezmeleri elmydama ulanyp bilersiňiz. Bu hemmesi! Synp indi TreeMap
size düşnükli we amaly meseleleri çözmekde takyk amaly taparsyňyz diýip umyt edýärin.
GO TO FULL VERSION