2015-10-05 25 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