Java TreeMap, xəritə interfeysini tətbiq edən bir sinifdir. Açar dəyərli məlumatları səmərəli şəkildə sıralanmış qaydada saxlaya bilən ağac əsaslı bir tətbiqdir. Buna bənzəyir HashMap lakin bu təlimin sonunda görəcəyimiz bir neçə fərq var.
Mündəricat
Java-da TreeMap
TreeMap, açarlarına uyğun dəyərləri saxlayır, burada açar boş olmalıdır, dəyərlər lazım olduqda sıfır ola bilər. Verilərin unikal olması və təkrarlanan dəyərlər içərməməsi lazım olan artan bir çeşidləmə qaydasını saxlayır. Artan sıradakı düymələrə əsaslanaraq təbii qaydada çeşidlənir. Bir müqayisə aparatından istifadə edərək məlumatları da çeşidləyə bilərik. Xəritə və naviqasiya interfeysini tətbiq edir və Abstract sinifini genişləndirir.
Sinxronizasiya edilmədiyi üçün TreeMap mövzu təhlükəsiz deyil. Bu mövcuddur java.util
harada idxal etməliyik java.util.TreeMap
TreeMap istifadə etmək üçün paket.
TreeMap konstruktoru
Java TreeMap sinfi aşağıdakılardan istifadə edir inşaatçılar:
konstruktor | təsvir |
---|---|
TreeMap () | Düymələrdən istifadə edərək təbii qaydada çeşidlənəcək boş bir ağac xəritəsi yaradır |
TreeMap (Müqayisələndirici c) | Parametr olaraq göstərilən Müqayisəedicidən istifadə edərək çeşidləyəcək boş bir ağac xəritəsi yaradır |
TreeMap (Xəritə m) | Parametr olaraq qəbul edilən Map m girişləri ilə treeMap yaradır və işə salır və düymələri təbii qaydada istifadə edir. |
TreeMap (SortMap sm) | SortMap sm-dəki girişləri ilə treeMap yaradır və işə salır və sm ilə eyni qaydada sıralayır. |
Nümunə: Xəritə istifadə edərək TreeMap
Aşağıdakı nümunə, xəritə istifadə edərək bir xəritənin necə qurulacağını göstərir. Girişlərin düymələrə əsasən artan qaydada sıralandığını görə bilərik.
import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class TreeMapConst { public static void main(String[] args) { Map<String,String> m = new HashMap<String,String>(); m.put("red", "Apple"); m.put("blue", "blueberry"); m.put("green", "kiwi"); TreeMap<String,String> tm = new TreeMap<String,String>(m); System.out.println(tm); } }
{blue=blueberry, green=kiwi, red=Apple}
Nümunə: SortMap istifadə edərək TreeMap
Aşağıdakı nümunə, SortMap istifadə edərək bir xəritənin necə qurulacağını göstərir.
import java.util.SortedMap; import java.util.TreeMap; import java.util.concurrent.ConcurrentSkipListMap; public class TreeMapConst { public static void main(String[] args) { SortedMap<String,String> sm = new ConcurrentSkipListMap<String,String>(); sm.put("red", "Apple"); sm.put("blue", "Blueberry"); sm.put("green", "Kiwi"); TreeMap<String,String> tm = new TreeMap<String,String>(sm); System.out.println(tm); } }
{blue=Blueberry, green=Kiwi, red=Apple}
TreeMap Metodları
Java TreeMap aşağıdakı metodları dəstəkləyir.
Üsul | təsvir | Parameters |
---|---|---|
Giriş celingEntry (Tam düymə) | Göstərilən düymədən böyük və ya ona bərabər olan ən kiçik düymənin açar dəyəri eşlemesini qaytarır və ya belə bir düymə yoxdursa sıfır qaytarır. | açar - böyük düyməni müqayisə etmək üçün istifadə olunan xəritədəki açar |
Tamsayı shiftKey (Tam düymə) | Göstərilən düymədən böyük və ya bərabər olan ən kiçik açarı qaytarır və ya belə bir düymə yoxdursa, sıfır qaytarır | açar - böyük düyməni müqayisə etmək üçün istifadə olunan xəritədəki açar |
boşluq təmiz () | TreeMap-dəki bütün eşlemeleri silər və boş olar | |
Obyekt klonu () | TreeMap-in dayaz nüsxəsini qaytarır | |
Müqayisə komparator () | Başqa düymələri sifariş etmək üçün istifadə olunan müqayisəni qaytarır, təbii çeşidləmə istifadə edərsə, sıfır verir | |
booleanKey (obyekt açarı) | Göstərilən açar üçün eşleme varsa, doğru qaytarır | açar - xəritədə axtarış açarı |
booleanValue ehtiva edir (obyekt dəyəri) | TreeMap düymə ilə dəyərə uyğunlaşdırma ehtiva edirsə, doğru qayıdır | dəyər - xəritədə axtarış dəyəri |
NavigableSet azalanKeySet () | TreeMap-dəki düymələrin tərs qaydada NaviagbleSet görünüşünü qaytarır | |
NavigableMap descendingMap () | Xəritədəki uyğunlaşmaların tərs qaydada görünüşünü qaytarır | |
Dəst girişSet () | Xəritədəki uyğunlaşmanın müəyyən bir görünüşünü qaytarır | |
Əvvəlcə giriş (giriş) | Xəritədəki ən kiçik açarın açar dəyər eşlemesini qaytarır | |
Tamsayı firstKey () | Xəritədəki ilk aşağı düyməni qaytarır | |
Giriş mərtəbəsi Giriş (Tam düymə) | Göstərilən düymədən daha kiçik olan ən böyük açarın açar dəyər eşlemesini qaytarır | açar - axtarış açarı |
Tamsayı floorKey (Tam düymə) | Göstərilən düymədən az və ya bərabər olan ən böyük açarı qaytarır | açar - axtarış açarı |
void forEach (İstehlakçı hərəkəti) | Xəritədəki hər giriş üçün göstərilən əməliyyatı həyata keçirir | fəaliyyət - hər girişdə ediləcək hərəkət |
String get (obyekt açarı) | Xəritədə göstərilən düymə ilə əlaqəli dəyəri qaytarır | açar - axtarış açarı |
String getOrDefault (Nəzarət açarı, String defaultValue) | Göstərilən düymə ilə əlaqəli dəyəri qaytarır, əks halda mövcud deyilsə, standart sətri qaytarır | açar - axtarış açarı defaultValue - açar tapılmadıqda standart dəyər |
SortMap headMap (Integer toKey) | Xəritənin açarı göstərilən toKey-dən çox az olan bir görünüş hissəsini qaytarır | toKey - axtarış açarı |
Gəzinti başlığı (İnteger toKey, Boolean daxil olmaqla) | Xəritənin açarı qətiliklə göstərilən toKey-dən az və ya bərabər olan bir baxış hissəsini qaytarır | |
Giriş aliKey (Tam düymə) | Göstərilən düymədən böyük və ya ona bərabər olan ən kiçik düymənin xəritəsini qaytarır | açar - axtarış açarı |
Tamsayı daha yüksəkKey (Tam düymə) | Göstərilən düymədən böyük və ya bərabər olan ən kiçik açarı qaytarır | açar - axtarış açarı |
Boole isEmpty () | Xəritənin boş olub olmadığını yoxlayır | |
KeySet () seçin | Xəritədəki düymələrin müəyyən bir görünüşünü qaytarır | |
Giriş sonEntry () | Xəritədəki ən böyük açarın uyğunlaşdırılmasını qaytarır | |
Tamsayı lastKey () | Xəritədəki ən böyük açarı qaytarır | |
Giriş aşağıEntry (Tam düymə) | Ən böyük açarın açar dəyərini göstərilən düymədən az qaytarır | açar - axtarış açarı |
Tamsayı altKey (Tam düymə) | Ən böyük açarı göstərilən düymədən az qaytarır | açar - axtarış açarı |
NavigableSet navigableKeySet () | Xəritədə olan düymələrin NavigableSet görünüşünü qaytarır | |
Giriş sorğusuFirstEntry () | Xəritədəki ən kiçik düymənin xəritəsini silir və qaytarır | |
Giriş sorğusuLastEntry () | Xəritədəki ən yüksək düymənin xəritəsini silir və qaytarır | |
String put (Tam düymə, String dəyəri) | Xəritədə açar dəyər eşleme əlavə edir | açar - daxil etmək üçün açar dəyər - açarla əlaqəli dəyər |
boşluqHamısı (Xəritə m) | Xəritədə göstərilən girişlərin bütün uyğunlaşdırılmasını qoyur | m - xəritə girişləri |
Simli silmək (Nişan açarı) | Müəyyən edilmiş düymə üçün uyğunluğu silir | açar - silinəcək düymə |
Mantiqi silmək (Nesne açarı, Nesne dəyəri) | Hər hansı bir dəyərə uyğunlaşdırıldığı təqdirdə göstərilən düymənin girişini silir | açar - silinəcək düymə dəyər - açarla əlaqəli dəyər |
String əvəz (Tam düymə, String dəyəri) | Müəyyən edilmiş düymə üçün uyğunluğu yalnız müəyyən bir dəyərə uyğunlaşdırıldıqda dəyişdirir | açar - axtarış açarı dəyər - dəyişdiriləcək dəyər |
boolean əvəz (Tam düymə, String oldValue, String newValue) | Müəyyən edilmiş düymə üçün uyğunluğu yalnız müəyyən bir dəyərə uyğunlaşdırıldıqda dəyişdirir | açar - axtarış açarı oldValue - açarın dəyəri newValue - dəyişdiriləcək dəyər |
void replaceAll (BiFunction funksiyası) | Hər giriş üçün dəyəri funksiyanın çıxışı ilə əvəz edir | funksiya - dəyəri hesablamaq funksiyası |
int ölçüsü () | Düymələrin və girişlərin sayını göstərən xəritənin ölçüsünü qaytarır | |
SortMap alt xəritəsi (Tamdan, Tamdan toKeyə) | Düymələri fromKey daxil olmaqla toKey exclusive arasında dəyişən xəritənin hissəsinin görünüşünü qaytarır | fromKey - başlanğıc aralığı (daxil olmaqla) toKey - bitən açar sıra (müstəsna) |
NavigableMap alt xəritəsi (Inteqlidən inteqer, İnklüzivdən boolean, Integer toKey, boolean toInclusive) | Düymələri fromKey-dən toKey-ə qədər olan xəritənin hissəsinin görünüşünü qaytarır | fromKey - açar aralığı başlayır fromInclusive - fromKey düyməsini daxil etməyi bildirir toKey - açar aralığın bitməsi toInclusive - toKey düyməsini daxil etməyi bildirir |
Sıralanmış xəritənin arxa xəritəsi (Key-dən tam say) | Düymələri fromKeydən daha böyük olan xəritənin görünüş hissəsini qaytarır | fromKey - başlanğıc açarı |
NavigableMap tailMap (Key-dən tam, boolean daxil olmaqla) | Düymələri fromKey düyməsindən böyük və ya bərabər olan xəritənin görünüş hissəsini qaytarır | fromKey - başlanğıc açarı daxil olmaqla - düymədən aralığa daxil edilməli olduqda bildirir |
Kolleksiya dəyərləri () | Dəyərlərin kolleksiya görünüşünü qaytarır | |
String toString () | Xəritənin bir simli təsvirini qaytarır |
Nümunə: TreeMap-ə elementlər əlavə edin
Aşağıda istifadə edərək TreeMap-ə elementlər əlavə etməyi göstərən nümunədir put()
metod. Daha əvvəl gördüyümüz kimi, TreeMap düymələri əsas götürərək girişləri təbii çeşidləmə qaydasında göstərir.
import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); System.out.println(tm.toString()); } }
{111=Aditya, 222=Dev, 333=Bharat, 444=Charan, 555=Hari}
Nümunə: TreeMap-dən girişləri əldə edin
Aşağıdakı nümunədə göstərilən düymə ilə müqayisədə müxtəlif girişləri necə götürə biləcəyimizi görə bilərik.
import java.util.Map.Entry; import java.util.TreeMap; public class RetrieveTreeMapEntries { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); Entry<Integer,String> eceiling = tm.ceilingEntry(222); System.out.println("Ceiling Entry: " + eceiling.getKey() + " " + eceiling.getValue()); Entry<Integer,String> efloor = tm.floorEntry(222); System.out.println("Floor Entry: " + efloor.getKey() + " " + efloor.getValue()); Entry<Integer,String> efirst = tm.firstEntry(); System.out.println("First Entry: " + efirst.getKey() + " " + efirst.getValue()); Entry<Integer,String> elast = tm.lastEntry(); System.out.println("Last Entry: " + elast.getKey() + " " + elast.getValue()); Entry<Integer,String> ehigh = tm.higherEntry(222); System.out.println("Higher Entry: " + ehigh.getKey() + " " + ehigh.getValue()); Entry<Integer,String>elower = tm.lowerEntry(222); System.out.println("Lower Entry: " + elower.getKey() + " " + elower.getValue()); } }
Ceiling Entry: 222 Dev Floor Entry: 222 Dev First Entry: 111 Aditya Last Entry: 555 Hari Higher Entry: 333 Bharat Lower Entry: 111 Aditya
Nümunə: Java TreeMap-də açarları alın
Aşağıdakı nümunə, göstərilən düymə ilə müqayisədə Java TreeMap-dən açarları necə alacağınızı göstərir.
import java.util.TreeMap; import java.util.Map.Entry; public class RetrieveTreeMapKeys { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); System.out.println("Ceiling Key: " + tm.ceilingKey(222)); System.out.println("Floor Key: " + tm.floorKey(222)); System.out.println("First Key: " + tm.firstKey()); System.out.println("Last Key: " + tm.lastKey()); System.out.println("Higher Key: " + tm.higherKey(222)); System.out.println("Lower Key: " + tm.lowerKey(222)); } }
Ceiling Key: 222 Floor Key: 222 First Key: 111 Last Key: 555 Higher Key: 333 Lower Key: 111
Nümunə: Girişləri Java TreeMap-dən silin
Aşağıdakı nümunə TreeMap-dan girişləri remove()
metod. Ayrıca, ilk və son girişləri pollFirstEntry()
və pollLastEntry()
üsulları.
import java.util.TreeMap; public class RemoveEntriesTreeMap { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); System.out.println("Poll First Entry: " + tm.pollFirstEntry()); System.out.println("Poll Last Entry: " + tm.pollLastEntry()); System.out.println("Remove Key 222: " + tm.remove(222)); System.out.println("Remove Entry 333: " + tm.remove(333, "Bharat")); System.out.println("Entries in the TreeMap after remove operation: " + tm); } }
Poll First Entry: 111=Aditya Poll Last Entry: 555=Hari Remove Key 222: Dev Remove Entry 333: true Entries in the TreeMap after remove operation: {444=Charan}
Nümunə: Java TreeMap-dən açar dəyəri yoxlayın və alın
Aşağıdakı nümunə, bir xəritə xəritəsində verilən düyməni və ya dəyəri ehtiva edib-etmədiyini necə yoxlayacağını göstərir containsKey()
və containsValue()
metod. -Dən istifadə edərək müəyyən bir dəyər əldə edə bilərik get()
or getOrDefault()
və istifadə edərək bütün dəyərləri əldə edin values()
metodu.
import java.util.TreeMap; public class TreeMapContains { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); System.out.println("Contains key: " + tm.containsKey(333)); System.out.println("Contains key: " + tm.containsKey(123)); System.out.println("Contains Value: " + tm.containsValue("Dev")); System.out.println("Contains Value: " + tm.containsValue("aaa")); System.out.println("Get: " + tm.get(555)); System.out.println("Get or default: " + tm.getOrDefault(444, "Test")); System.out.println("Get or default: " + tm.getOrDefault(123, "Test")); System.out.println("Values: " + tm.values()); } }
Contains key: true Contains key: false Contains Value: true Contains Value: false Get: Hari Get or default: Charan Get or default: Test Values: [Aditya, Dev, Bharat, Charan, Hari]
Misal: azalan çeşidləmə
TreeMap, məlumatları standart olaraq düymələrin artma sırasına görə sıralayır. Ancaq bunları istifadə edərək azalan sırada sıralaya bilərik descendingKeySet()
düymələri tərs qaydada sıralamaq və descendingMap()
açar dəyər cütlərini tərs qaydada sıralamaq.
import java.util.TreeMap; public class DescendingTreeMap { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); System.out.println(tm.descendingKeySet()); System.out.println(tm.descendingMap()); } }
[555, 444, 333, 222, 111] {555=Hari, 444=Charan, 333=Bharat, 222=Dev, 111=Aditya}
Misal: Java TreeMap vasitəsilə təkrarlayın
İstifadə edərək TreeMap-dəki bütün girişləri təkrarlaya bilərik entrySet()
metod. Yalnız düymələri əldə etmək üçün ya istifadə edə bilərik keySet()
metod və ya navigableKeySet()
metodu.
import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; public class IterateTreeMap { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); System.out.println("Iterate using Entry Set:"); for(Map.Entry<Integer,String> m: tm.entrySet()) System.out.println(m.getKey() + " " + m.getValue()); System.out.println("Iterate using KeySet: "); for(Integer i: tm.keySet()) System.out.println(i + " " + tm.get(i)); System.out.println("Iterate through NavigableKeySet: "); System.out.println(tm.navigableKeySet()); } }
Iterate using Entry Set: 111 Aditya 222 Dev 333 Bharat 444 Charan 555 Hari Iterate using KeySet: 111 Aditya 222 Dev 333 Bharat 444 Charan 555 Hari Iterate through NavigableKeySet: [111, 222, 333, 444, 555]
Nümunə: Java TreeMap-in headMap, subMap və tailMap metodları
Aşağıda verilmiş TreeMap xəritəsinin bir hissəsini almaq üçün nümunə verilmişdir. Nə zaman istifadə edirik headMap()
üsul, başlanğıcdan göstərilən düyməyə qədər bütün girişləri alır. The tailMap()
metod göstərilən düymədən xəritənin sonuna qədər bütün girişləri götürür. Xəritəçəkmə girişlərinin bir hissəsini almaq üçün istifadə edirik subMap()
girişləri göstərilən başlanğıcdan son aralığa qaytaran metod.
import java.util.TreeMap; public class TreeMapMethods { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); System.out.println("Output of headMap method:"); System.out.println(tm.headMap(333)); System.out.println(tm.headMap(333, true)); System.out.println(tm.headMap(333, false)); System.out.println("Output of tailMap method: "); System.out.println(tm.tailMap(333)); System.out.println(tm.tailMap(333, true)); System.out.println(tm.tailMap(333, false)); System.out.println("Output of subMap method: "); System.out.println(tm.subMap(222, 444)); System.out.println(tm.subMap(222, true, 444, true)); System.out.println(tm.subMap(222, false, 444, false)); System.out.println(tm.subMap(222, false, 444, true)); System.out.println(tm.subMap(222, true, 444, false)); } }
Output of headMap method: {111=Aditya, 222=Dev} {111=Aditya, 222=Dev, 333=Bharat} {111=Aditya, 222=Dev} Output of tailMap method: {333=Bharat, 444=Charan, 555=Hari} {333=Bharat, 444=Charan, 555=Hari} {444=Charan, 555=Hari} Output of subMap method: {222=Dev, 333=Bharat} {222=Dev, 333=Bharat, 444=Charan} {333=Bharat} {333=Bharat, 444=Charan} {222=Dev, 333=Bharat}
Nümunə: Java TreeMap-də dəyərləri dəyişdirin
Java istifadəçi xəritəsində müəyyən bir dəyəri replace()
metod. Göstərilən düymə tapılmadıqda, dəyəri əvəz etmir və ifadəni laqeyd edir.
import java.util.TreeMap; public class ReplaceTreeMap { public static void main(String[] args) { TreeMap<Integer, String> tm = new TreeMap<Integer, String>(); tm.put(111, "Aditya"); tm.put(333, "Bharat"); tm.put(222, "Dev"); tm.put(555, "Hari"); tm.put(444, "Charan"); tm.replace(333, "Banu"); tm.replace(444, "Charan", "Chandru"); tm.replace(123, "Test"); System.out.println("Values after replace method: \n" + tm); } }
Values after replace method: {111=Aditya, 222=Dev, 333=Banu, 444=Chandru, 555=Hari}
Java-da TreeMap və HashMap arasındakı fərq
Ağac xəritəsi | HashMap |
---|---|
Artan qaydanı saxlayır | Heç bir qayda saxlamır |
Null düymə ola bilməz | Bir sıfır düymə ola bilər |
Ağac quruluşuna əsaslanan bir tətbiqdir | Hashtable əsaslı bir tətbiqdir |
Boş dəyərlərə icazə vermir | Çox null dəyərlərə imkan verir |
Çeşidləmə daha yavaş olur | Çeşidləmə daha sürətli olur |
Qırmızı-qara ağac məlumat quruluşundan istifadə edir | Hashtable məlumat quruluşundan istifadə edir |