2015-05-29 25 views
0

我有一些代碼,我想通過遞歸更高效。麻煩是我不知道從哪裏開始。該代碼比較兩個陣列列表a和b,看它們是否相等。假設兩個數組的大小相等。Java遞歸測試,如果arraylist是相等的

的代碼是

public boolean isEqual(A B) { 
    boolean answer = false; 
    if (lessThanOrEqualTo(B) == true); 
    for (int i = 0; i < DList.size(); i++) { 
     if (DList.get(i) == B.DList.get(i)) answer = true; 
     else answer = false; 
    } 
    return answer; 
} 

我已經寫當前

public boolean isEqualRecursion(A B) { 
    if DList.size() == 0; 
    return false(); 
} else { 

} 

我知道停止的情況下爲0當大小爲0沒有任何反應。我不知道寫什麼未來

任何幫助將不勝感激

感謝

+10

_「我有一些代碼,我希望通過遞歸提高效率。」_遞歸可能不是一種有效的方法來比較兩個列表是否相等。這是一個練習嗎? –

+1

'arraylist1.equals(arraylist2)'? – assylias

+0

這是不好用''==檢查用'equals' – Blip

回答

0

我認爲這對你來說是一個很好的開始。這會查看所有元素,假設它們是一個數組,然後檢查它們的大小是否相等。

public boolean isEqual(ArrayList<?> a, ArrayList<?> b) { 
    if (a.size() != b.size()) 
     return false; 

    for (int i = 0; i < a.size(); i++) { 
     if (!isEqual((ArrayList<?>)a.get(i), (ArrayList<?>)b.get(i))) { 
      return false; 
     } 
    } 
    return true; 
} 

現在一對夫婦的事情要考慮:

  • 這是假設的內容(和b)必須是ArrayList在行(ArrayList<?>)a.get(i)如果我們ArrayList實際上包含了一些什麼東西,像一個整數?

  • 如果我們的數組列表包含null作爲一項?

  • 如果我們通過兩個零ArrayList s怎麼辦? (甚至只是一個?)

我不知道你的函數lessThanOrEqualTo(B)點是問題的這部分還是你寫下來了?

又是什麼是DList

+0

感謝複製下來交配:)一個例子: ) – noobcodes

2

我有一些代碼,我想提出由遞歸更有效。

你不可能通過遞歸來提高效率。有可能是少了高效,也脆弱。這是因爲標準的Java編譯器沒有實現tail-call優化。發生脆弱性是因爲如果輸入數組足夠大,遞歸比較算法很容易觸發堆棧溢出。

但是,如果你想這樣下去是「練習」,那麼我的提示是一個索引參數添加到isEqualRecursion簽名......

0

這是一個典型的遞歸問題。你可能想嘗試這樣的事情:

int x = 0; 

if(Dlist.get(x) != B.Dlist.get(x)) { 
    return false; 
} else { 
    x+1; 
} 
if(x!= dList.size()) { 
    recursion; 
} 

return true;