2013-09-28 26 views
0

我有一個意外更新的列表。我有一個函數返回一個列表。我想用不同的參數調用它兩次,並將結果存儲在一個長列表中。列表意外更新

List<URL> resultUrls = new ArrayList<URL>(); 
webPages.runSearch(parameter1);     // runs search and stores result in a public variable of the object webPages 
resultUrls = webPages.getUrls();     // returns public variable 
webPages.runSearch(parameter2); 
resultUrls.addAll(webPages.getUrls()); 

在執行最後一行之前,resultUrls已經包含runSearch使用parameter2更新的結果。我希望它仍然保持帶有參數1的runSearch的結果。最終的結果是我得到兩個使用參數2追加到另一個搜索副本。我想要的是使用參數1進行搜索,並使用resultUrls變量中存儲的parameter2進行搜索。

任何幫助將不勝感激。

回答

2
List<URL> resultUrls = new ArrayList<URL>(); 
webPages.runSearch(parameter1);     // runs search and stores result in a public variable of the object webPages 
resultUrls = webPages.getUrls();     // returns public variable 

此時,您有後丟棄ArrayList你在第一個語句創建的,現在resultUrls是公衆變量是webPages引用的對象的成員的引用。

你應該能夠從這一點弄清楚。

提示:上面的最後一條語句應該是

resultUrls.addAll(webPages.getUrls()); 
0

我們不知道什麼是webPages,但我懷疑的問題是,你的runSearch方法不創建一個新的列表 - 它只是在變異現有的。我懷疑你想創建第一個列表的副本。請注意,您不需要創建的原始ArrayList<URL>,因爲無論如何您都會丟棄它。

webPages.runSearch(parameter1); 
List<URL> resultUrls = new ArrayList<URL>(webPages.getUrls()); 
webPages.runSearch(parameter2); 
resultUrls.addAll(webPages.getUrls()); 

(您可以開始與一個空表,只是在第一次調用之後添加的webPages.getUrls()的結果,但它似乎有點毫無意義。)

我建議你真正改變你的設計,但是,因此webPages的類型無論如何都不是有狀態的,而是使runSearch返回相關列表。在這一點上,你可以有:

List<URL> resultUrls = webPages.runSearch(parameter1); 
resultUrls.addAll(webPages.runSearch(parameter2));