Java necə işləyir

Mövzu seç, kod yaz və daxildə nə baş verdiyini addım-addım gör.

Memory

Collection-lar

Concurrency

Dil və JVM

Mövzular

TreeMap necə işləyir

Sıralı tree

HashMap sıra saxlamır, TreeMap isə key-ləri həmişə sıralı saxlayır. Hər Node üçün: solda kiçiklər, sağda böyüklər.

Axtarış hər addımda yarısını atır: O(log n). 1 milyon key üçün təxminən 20 müqayisə.

Solda get bas və yola bax.

Red-black qaydaları

Key-lər sıra ilə gəlsə, adi tree bir list-ə çevrilər və O(n) olar. Red-black tree rənglərlə balansı qoruyur.

Sağda üç qayda canlı yoxlanır. Onlar ən uzun yolun ən qısa yoldan 2 dəfədən çox uzun olmamasını təmin edir.

Başqa key-lər əlavə et: qaydalar heç pozulmur.

Insert: recolor

Yeni Node qırmızı gəlir, çünki qara sayını dəyişmir. Valideyni də qırmızıdırsa, düzəliş lazımdır.

Əmi də qırmızıdırsa, ən ucuz düzəliş rəngləri dəyişməkdir: valideyn və əmi qara, baba qırmızı olur.

Solda 1 üçün put bas və addımla.

Insert: rotation

Əmi qaradırsa, rəng kifayət etmir. Rotation Node-ları yerini dəyişir, amma sıranı pozmur.

Burada 10, 5 var. 1 üçün put bas: sağa rotation. Sonra Təmizlə bas, 10, 5, 7 yaz: əvvəl sola, sonra sağa rotation.

Bir insert ən çox 2 rotation edir.

Remove

İki child-ı olan Node birbaşa silinmir: yerinə növbəti key yazılır, köhnə Node isə silinir.

Silinən Node qırmızıdırsa, qaydalar pozulmur. Qaradırsa, fixAfterDeletion rotation və rənglə balansı bərpa edir.

Solda 30 üçün remove bas.

Naviqasiya və tələlər

Sıra sayəsində HashMap-in edə bilmədiyi sorğular var: floorKey, ceilingKey, headMap, tailMap, firstKey.

null key olmaz, çünki müqayisə olunmalıdır.

Ən gizli tələ: TreeMap üçün eynilik compareTo == 0 deməkdir, equals yox. Uzunluğa görə Comparator-da "Leyla" "Aysel"-in value-sunu əvəz edir.