2014-02-11 81 views
0

我有一個List<Solution> data = new ArrayList<Solution>();它保存用戶信息。 Solution包含用戶電子郵件,地址,orderid和信用卡信息和交易ID,我想找出重複的數據(相同的交易ID和相同的電子郵件地址)。所以,我比較所有的數據的,我這樣做有效的方式來存儲和比較所有元素

int totalNumberOfData = data.size(); 
int counter; 
for (counter = 0; counter < totalNumberOfData; counter++) { 
    for (int j = 1; j < totalNumberOfData; j++) { 
     boolean faurdFound; 
     faurdFound = isFaurdDeal(counter, j); 
     if (faurdFound == true) { 
      break; 
     } 
    } 
} 

我想知道:

  1. 爲了比較數據,如果這個解決方案是有效的還是有實現這個解決方案沒有更好的辦法?
  2. 我正在使用List存儲數據。如果我使用HashMap而不是List。它會有效嗎? HashMap不要按照順序。但是,我必須保持順序。什麼可以是這個問題的更好的解決方案?
+0

使用'LinkedHashMap'。 –

+0

查看'LinkedHashMap' – SLaks

+0

備註:不要通過分隔聲明和初始化來混淆你的代碼。這不是pascal。 – maaartinus

回答

1

A HashMapHashSet將允許更快地檢查它們是否包含對象,因爲它不需要掃描列表中的每個對象。問題是,你需要提前識別正確的密鑰,但只要你能做到這一點,他們將會很好地工作。

如果您需要訂購,您可以使用TreeMap(將保留元素排序)或LinkedHashMap(這將使元素保持添加順序)。

2

您的解決方案具有二次計算複雜性。它基本上意味着它消耗的時間與列表大小的平方成正比。你可以閱讀有關大O符號來學習這一特點的更多正式的觀點 - http://en.wikipedia.org/wiki/Big_O_notation

使用LinkedHashMapSolution正確重寫equals()hashCode()方法可以達到線性複雜度,因爲檢查是否存在將在不斷進行時間。

+0

+1爲解釋複雜性和爲什麼使用'HashMap'會有所幫助:) –

相關問題