我在寫一個TreeMap的實現,並且在get和put方法中遇到了問題。這裏是代碼:Java TreeMap實現獲取和放置方法
public class MyTreeMap<K extends Comparable<? super K>,V> extends AbstractMap<K,V> {
K key;
V value;
int height;
MyTreeMap<K,V> left,right;
int size;
private V get(K searchKey) {
if(this.isEmpty())
return null;//it needs an exception
if(this.key.compareTo(searchKey) == 0)
return this.value;
else if(this.key.compareTo(searchKey) > 0)
return this.left.get(searchKey);
else
return this.right.get(searchKey);
}
public V put(K key, V value) {
if(this.containsKey(key)) {
if(this.key.compareTo(key) == 0) {
V temp = this.value;
this.value = value;
return temp;
}
else if(this.key.compareTo(key) < 0)
return this.right.put(key, value);
else if(this.key.compareTo(key) > 0)
return this.left.put(key, value);
}
else {
if(this.isLeaf() || this.isEmpty()) {
if(this.key.compareTo(key) > 0) //this line gives NPE during tests
this.left = new MyTreeMap(key,value,null,null);
else
this.right = new MyTreeMap(key,value,null,null);
//check for balance and rebalance if needed
this.size++;
this.setHeight();
return null;
}
else {
if(this.key.compareTo(key) > 0)
return this.left.put(key, value);
else
return this.right.put(key, value);
}
}
}
最瘋狂的錯誤是put方法需要另一個return語句。通過代碼檢查很多次,在我看來,這不應該是這樣,因爲有一個return語句不需要任何布爾語句爲真。
在測試put方法時,我得到了一個NPE。我認爲我的代碼有一些非常重要的邏輯錯誤,因爲我似乎無法弄清楚什麼是錯誤的。如果你可以請指出我正確的方向來解決這些各種錯誤,這將是有益的。謝謝。
好了,第一個'if'需求 – irrelephant
如果你得到一個NPE,請發佈堆棧跟蹤... – home
你在哪裏設置key值?map有鍵的事實並不意味着它有一個'key'屬性(它們有一堆它們,不能存儲在它裏面)它是一個樹形地圖,因爲它是一個用樹實現的地圖,而不是其他的方式,所以它是一個地圖!! – SJuan76