Java 树映射节点在分配后为空
我试图实现TreeMap类,但在将元素放入TreeMap时遇到了一个问题。代码如下:Java 树映射节点在分配后为空,java,dictionary,tree,treemap,Java,Dictionary,Tree,Treemap,我试图实现TreeMap类,但在将元素放入TreeMap时遇到了一个问题。代码如下: public class TreeMap<K,V> implements Map<K,V> { private Comparator<K> comparator; private int size; private Node<K,V> head; public TreeMap(Comparator<K> compar
public class TreeMap<K,V> implements Map<K,V> {
private Comparator<K> comparator;
private int size;
private Node<K,V> head;
public TreeMap(Comparator<K> comparator){
this.comparator = comparator;
size = 0;
}
@Override
public int size() {
return size;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public V put(K key, V value) {
return rootPut(head, key, value);
}
private V rootPut(Node<K,V> node, K key, V value){
if(isEmpty()){
node = new Node<>(key, value);
size++;
return null;
}
int compare = comparator.compare(head.key, key);
if(compare == 0){
V auxValue = node.value;
node.value = value;
size++;
return auxValue;
} else if(compare > 0){
return rootPut(node.right, key, value);
} else{
return rootPut(node.left, key, value);
}
}
}
公共类树映射实现映射{
专用比较器;
私有整数大小;
专用节点头;
公共树映射(比较器-比较器){
这个比较器=比较器;
尺寸=0;
}
@凌驾
公共整数大小(){
返回大小;
}
@凌驾
公共布尔值为空(){
返回大小==0;
}
@凌驾
公共V输入(K键,V值){
返回rootPut(头、键、值);
}
私有V根输出(节点,K键,V值){
if(isEmpty()){
节点=新节点(键、值);
大小++;
返回null;
}
int compare=comparator.compare(head.key,key);
如果(比较==0){
AUxV值=node.value;
node.value=值;
大小++;
返回auxValue;
}否则如果(比较>0){
返回rootPut(node.right、key、value);
}否则{
返回rootPut(node.left、key、value);
}
}
}
问题是,当我执行这一行时:
node = new Node<>(key, value);
node=新节点(键、值);
节点始终为空。我已经试过调试代码,但问题仍然存在
这里没有包括其他方法,因为它们很有效。您有:
if(isEmpty()){
node = new Node<>(key, value);
if(isEmpty()){
节点=新节点(键、值);
当然应该是这样
if(isEmpty()){
head = new Node<>(key, value);
if(isEmpty()){
head=新节点(键、值);
注意:这并不能修复您所有的bug,但它确实修复了myhead
总是null
的问题。您有:
if(isEmpty()){
node = new Node<>(key, value);
if(isEmpty()){
节点=新节点(键、值);
当然应该是这样
if(isEmpty()){
head = new Node<>(key, value);
if(isEmpty()){
head=新节点(键、值);
注意:这并不能修复您所有的bug,但它确实修复了my
head
总是null
的问题。是在该行执行后立即为null,还是在从rootPut()返回后立即为null?是在该行执行后立即为null,还是从rootPut()返回后为null
?但不一样??这是不同的地方???@joacoteriro-不!节点是调用方法时包含的头
的本地副本,因此可能空
头
是对象中的实例变量。通过使用头=新…
可以更改对象的头
值树-如你所愿。使用node=…
你不会改变任何东西。哦,好吧,我在java中很新,我不知道。非常感谢!@joacoteriro-一些很好的解释。但是不一样吗?这是什么区别呢?@joacoteriro-不!node
是方法创建时包含的头的本地副本调用so可能是null
head
是对象中的实例变量。通过使用head=new…
您可以更改树的head
值-如您所愿。使用node=…
您不会更改任何内容。哦,好的,我在java中是一个新的,我不知道。非常感谢!@joacterniro-Som我有很好的解释。