2015-10-05 59 views
-4

我很好的實現部分,我只是想知道如何將值插入基於比較器或類似的樹形圖。 請不要只給與可比較器和比較器的執行情況。插入值時,比較和比較器如何在treemap或treeset中內部工作?

基本上我想知道如何在Red Black Tree(TreeMap的底層數據結構)中插入值時Comparable和Comparator是如何不同的。 插入將如何完成。? 如果它是可比較的,用哪個對象插入對象將進行比較?如果它是比較器,則將比較哪兩個對象以獲得樹中的適當位置。 如果有一個例子,它會很好

+0

你還需要什麼除了執行? – Jabir

+0

可能重複的[Java:Comparable vs Comparator](http://stackoverflow.com/questions/4108604/java-comparable-vs-comparator) –

+0

我想知道插入部分,並插入到紅黑樹如何這兩個彼此不同。 –

回答

1

TreeMapTreeSet基本上是二叉樹。由於這個位置,一個節點可以被找到/將插入可以很容易地找到使用二進制搜索:

//just a stub of how the search for a specific node might work (this is not the real implementation 
Node currentNode = ... 
if(comparator.compare(currentNode.content , toSearch) < 0) 
    currentNode = currentNode.leftNode(); 
else 
    ... 
+0

謝謝你的回答。 即使我知道TreeMap的內部數據結構是Red Black Tree.i想知道當我們實際插入值時這兩個工作有多不同。假設比較對象與其自身,比較器比較兩個相同類型的對象。 當談到在紅黑樹插入部分如何都將工作? 如果你可以用任何一個例子來解釋,那就太好了。 –

+0

@NarahariBabuKannemadugu啊,好吧,我誤解了這個問題。這很簡單:'a.compareTo(b)'應該總是產生與'someComparator.compare(a,b)'相同的輸出。因此,我們可以簡單地將這兩行中的任何一行與另一行進行切換,以比較值。剩下的就是匹配插入/刪除方法的簽名。 – Paul

+0

@NarahariBabuKannemadugu你應該改變一些更匹配的問題,比如「比較器和可比較器是如何互換的」?只是更準確地匹配問題 – Paul