Java TreeMap工作原理及實現

2021-09-01 08:39:47 字數 4026 閱讀 5907

hashmap不保證資料有序,linkedhashmap保證資料可以保持插入順序,而如果我們希望map可以保持key的大小順序的時候,我們就需要利用treemap了。

treemaptmap =newtreemap();tmap.put(1,"語文");tmap.put(3,"英語");tmap.put(2,"數學");

tmap.put(4,"政治");

tmap.put(5,"歷史");

tmap.put(6,"地理");

tmap.put(7,"生物");

tmap.put(8,"化學");

for(entryentry : tmap.entryset())

其大致的結構如下所示:

使用紅黑樹的好處是能夠使得樹具有不錯的平衡性,這樣操作的速度就可以達到log(n)的水平了。具體紅黑樹的實現不在這裡贅述。

如果存在的話,old value被替換;如果不存在的話,則新添乙個節點,然後對做紅黑樹的平衡操作。

publicv put(k key, v value)

intcmp;

entryparent;

// split comparator and comparable paths

comparatorsuperk> cpr = comparator;

// 如果該節點存在,則替換值直接返回

if(cpr !=null)while(t !=null);

}

elsewhile(t !=null);

}

// 如果該節點未存在,則新建

entrye =newentry<>(key, value, parent);

if(cmp <0)

parent.left = e;

else

parent.right = e;

// 紅黑樹平衡調整

fixafterinsertion(e);

size++;

modcount++;

returnnull;

}

get函式則相對來說比較簡單,以log(n)的複雜度進行get

finalentrygetentry(object key)

returnnull;

}

publicv get(object key)

treemap是如何保證其迭代輸出是有序的呢?其實從巨集觀上來講,就相當於樹的中序遍歷(ldr)。我們先看一下迭代輸出的步驟

for(entryentry : tmap.entryset())

根據the enhanced for statement,for語句會做如下轉換為:

for(iterator> it = tmap.entryset().iterator() ; tmap.hasnext(); )

it.next()的呼叫中會使用nextentry呼叫successor這個是過的後繼的重點,具體實現如下:

statictreemap.entrysuccessor(entryt)else

returnp;

}

}

怎麼理解這個successor呢?只要記住,這個是中序遍歷就好了,l-d-r。具體細節如下:

a. 空節點,沒有後繼b. 有右子樹的節點,後繼就是右子樹的「最左節點」c. 無右子樹的節點,後繼就是該節點所在左子樹的第乙個祖先節點

a.好理解,不過b, c,有點像繞口令啊,沒關係,上圖舉個例子就懂了!

有右子樹的節點,節點的下乙個節點,肯定在右子樹中,而右子樹中「最左」的那個節點則是右子樹中最小的乙個,那麼當然是右子樹的「最左節點」,就好像下圖所示:

無右子樹的節點,先找到這個節點所在的左子樹(右圖),那麼這個節點所在的左子樹的父節點(綠色節點),就是下乙個節點。

Java TreeMap的排序效果

treemap預設按照key的大小公升序排列 public class test else list list newarraylist map.entryset for entry e list 結果為 public class test else 根據value來排序,將鍵值對儲存到list,用...

簡述hdfs工作原理 HDFS的工作原理

hdfs 的工作原理 hadoop 分布式檔案系統 hdfs 是一種被設計成適合執行在通用硬體上的分布式檔案系統。hdfs 是乙個高度容錯性的系統,適合部署在廉價的 機器上。它能提供高吞吐量的資料訪問,非常適合大規模資料集上的應用。要理解 hdfs 的內部工作原理,首先要理解什麼是分布式 檔案系統。...

mysql nfs原理 nfs工作原理

nfs其最大功能時可以通過網路讓不同作業系統的計算機可以共享資料,所以也可以將其看作時一台檔案伺服器.nfs有屬於自己的協議與使用的埠號,但是在傳送資料或者其他相關資訊時候,nfs伺服器使用乙個稱i 遠端過程呼叫 rpc 的協議來協助nfs伺服器本身的執行 nfs協議 使用nfs,客戶端可以透明地訪...