我目前正在开展一个项目,而且我现在已经陷入困境。基本上我试图弄清楚如何比较类型:键到类型:Int。从代码中,here.theKey和theKey2是Key类型,keyKey将key作为参数,获取哈希码,然后用于在BST中找到名为' here'的相同哈希码。我遇到的问题是,我无法弄清楚如何将here.theKey的值与作为int的Key1进行比较。
以下是方法:
public Value get(Key key)
{
int theKey1 = hash(key);
TreeNode here = Tree;
while (here != null)
{
int theKey2=here.theKey;
if(theKey1 < theKey2 )
{
here = here.left;
}
else if(theKey1>theKey2)
here = here.right;
else
{
return here.value;
}
}
throw new IllegalArgumentException("Value associated with the key not found");
}
我尝试使用compareTo,但由于theKey1是Int类型,因此出现错误。任何帮助或指导将不胜感激。
答案 0 :(得分:0)
在这里散列密钥毫无意义。哈希表中的BST由所有具有相同哈希码的元素组成。您需要确保private List<RedditObject> objectList=new List<RedditObject>();
并使用Key implements Comparable<Key>
。
答案 1 :(得分:-1)
你已经掌握了答案。在代码中,您希望类型为Key
的引用仅使用hash
。那么为什么不将所有Key
转换成它们的哈希值并在需要时比较这些哈希值呢?
像
将while循环中的第一个表达式转换为int theKey2=hash(here.theKey);
我在代码中也看到了另一个问题。如果循环中if
或else if
的条件求值为true,则在执行相应的块之后,控件将直接进入throw
语句。因此,该方法将不会分支到根的子节点。因此,将continue
语句作为if
和else if
块的最后一行。