2013-02-11 93 views
0

我正在嘗試使用二進制搜索方法編寫已排序字典的刪除方法。我的字典是一個位置列表,基於排序的字典。搜索方法如下:刪除方法排序字典java

private Entry<Integer, V> binarySearch(int key, int low, int high) { 
    int mid = (high + low)/2; 
    if(low > high){ 
     return null; 
    } 
    else if(sortedList.get(mid).getKey() == key){ 
     return sortedList.get(mid); 
    } 
    else if(sortedList.get(mid).getKey() > key){ 
     return binarySearch(key, low, mid-1); 
    } 
    else{ 
     return binarySearch(key, mid+1, high); 
    } 
} 

到目前爲止我的代碼是:

@Override 
public Entry<Integer, V> remove(Entry<Integer, V> e) 
     throws InvalidEntryException { 
if(e == null){ 
    throw new InvalidEntryException(""); 
} 
Entry<Integer, V> entry = binarySearch(e.getKey(), 0, size()); 
if(entry != e){ 
    boolean found = false; 
    int i = getLocation(entry.getKey()); 
    while(!found && i < size()-1){ 
     entry = binarySearch(e.getKey(), i+1, size()); 
     if(entry == e){ 
      found = true; 
      sortedList.remove(i); 
     } 
     i++; 
    } 
} 
else{ 
    sortedList.remove(getLocation(entry.getKey())); 
} 
if(entry == null){ 
    throw new InvalidEntryException(""); 
} 
else{ 
    return entry; 
} 
} 

任何人都可以對任何輸入的所有幫助?我真的不知道如何去做這件事,我已經無法沮喪了。我基本上需要刪除,如果條目是參數相同的實例。與字典一樣,可能有多個條目具有相同的鍵,但只有在條目與參數是同一實例時才需要刪除。

謝謝你的幫助。

回答

0

可能有多個條目具有相同的鍵,但我只需刪除條目與參數相同的實例。

你對java中實例的平等感到困惑。您需要重寫equals()方法並定義等式如何對您的對象進行操作。有了這個,你還需要看看hashcode()

而您試圖比較的實例永遠不會與param傳遞的實例相同。

+0

不,我明白。我不想重寫equals方法。我被指示使用==運算符而不是更改equals() – ola 2013-02-11 16:42:21