public boolean insert(K key, V value) {
if (contains(key)) { //if the binary tree contains it don't insert it.
return false;
}
if (rNode == null) { //if the root node is empty, there is nothing in the tree
//create a new DictionaryNode.
rNode = new DictionaryNode<K, V>(key, value);
curNode = rNode;
} else {//if the above aren't true then you can insert it.
placeNode(key, value, rNode, null, false); //use private method placeNode
}
changeCounter++;
currentSize++;
return true;
}//end insert
这是另一个函数。我希望能够完成 placeNode 在我的插入方法中所做的所有操作。我希望能够摆脱我的 placeNode 方法。
private void placeNode(K key, V value, DictionaryNode<K, V> node, DictionaryNode<K, V> parent, boolean nodeLeft) {
if (node == null) {
if (nodeLeft) {
parent.lChild = new DictionaryNode<K, V>(key, value);
} else {
parent.rChild = new DictionaryNode<K, V>(key, value);
}
} else if (((Comparable<K>) key).compareTo(node.key) < 0) {
placeNode(key, value, node.lChild, node, true);
} else {
placeNode(key, value, node.rChild, node, false);
}
}//end placeNode
最佳答案
除了将这两个函数合并在一起而令人头疼之外,没有任何好处。它们执行不同操作,因此,应尽可能将其分成更小的代码块。
方法的拆分很好。不要尝试合并它们。
您唯一能做的就是用您想要删除的方法的确切主体替换您的方法调用...但这会使事情变得极其复杂。
顺便说一句,你的 Actor 阵容 ((Comparable<K>) key
可以产生 ClassCastException
。如果类型绑定(bind)到K
不具有可比性,那么在运行时,你就会遇到一个大问题。泛型不应该以这种方式使用 - 您希望提供类型的编译时安全性。
幸运的是,您可以通过向类中的类型添加上限来解决此问题:
public class DictionaryNode<K extends Comparable<K>, V> {
// implementation to follow
}
关于java - 如何将这两个功能合并在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20485104/