2014-06-18 88 views
0

我正在努力與一種算法。我想從第二個列表中的數據開始對當前列表執行一些操作(更新,刪除,添加元素)。我的列表管理最好的算法是什麼?

我的第一個列表currentList和提交的名單submittedList

的問題,我必須解決的是:

  1. 如果currentList的元素是在submittedList,這個元素必須在更新currentList
  2. 如果當前列表的元素不在提交列表中,則該元素必須從當前列表中刪除
  3. 提交的列表中的所有元素都不在currentList必須添加到currentList

如果你能幫助請,謝謝

+0

'List'有方法'contains','add'和'remove'。使用它們來檢查元素是否存在以及插入和刪除元素。 – BackSlash

+0

這些元素是獨一無二的嗎?它看起來像這些操作將更快地工作,而不是在列表上創建集合 –

+2

你可以拋棄'currentList'並使用'submittedList'嗎?如果不是的話,你可以只''清除'currentList'和'addAll'將'submittedList'的內容清除爲'currentList'? – user2357112

回答

1

以不同的方式思考這個。您需要currentList僅具有submittedList中的對象,但只需修改對象(如果它存在於這兩個列表中)。所以你的算法只有兩個步驟。

我的建議是去同一個臨時列表。假設列表中的對象是字符串,我在下面添加了一個解決方案。 (您可以用您的自定義對象替換字符串)

List<String> tempList = new ArrayList<String>(); 
for(String test : submittedList) { 
    if(currentList.contains(test)) { 
     String test1 = test+"xyz"; // do modification to test String 
     tempList.add(test1); 
    } else { 
     tempList.add(test); 
    } 
} 
currentList.clear(); // Now add to the actual list after clearing 
currentList.addAll(tempList); 
+0

這個問題是,迭代時,即使它與submitList的第二個元素匹配,也會添加元素。 – Pracede

+0

哦..所以你的清單有重複。那麼最好將List轉換爲Set並執行這個邏輯。 – Dinal

0

如果可以,請對兩個列表進行排序。然後掃描他們在遞增順序:讀取currentListsubmittedList的第一要素cs。如果c==s,更新c並獲得下一cs;如果c<s(意思是csubmittedList),從currentList丟棄c並獲得下一c;如果c>s(意思是scurrentList),插入currentLists並獲得下一個s。等等。

當列表中的一個用完時,請繼續執行規則c<**>s。兩個列表都用盡時停止。

相關問題