0

予期せず更新されるリストがあります。リストを返す関数があります。異なるパラメーターで 2 回呼び出し、結果を 1 つの長いリストに格納したいと考えています。

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 には、parameter2 を使用して runSearch から更新された結果が既に含まれています。パラメータ 1 を使用して runSearch の結果を引き続き保持する必要があります。最終的な結果は、お互いに追加された parameter2 を使用して検索の 2 つのコピーを取得することです。私が欲しいのは、parameter1 を使用した検索に、resultUrls 変数に格納されている parameter2 からの検索を追加したものです。

どんな助けでも大歓迎です。

4

2 に答える 2

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

この時点で、最初のステートメントで作成した を破棄し、によって参照されるオブジェクトのメンバーである public 変数への参照になります。ArrayListresultUrlswebPages

この時点から理解できるはずです。

ヒント: 上記の最後のステートメントは

resultUrls.addAll(webPages.getUrls());
于 2013-09-28T18:30:00.547 に答える
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));
于 2013-09-28T18:31:19.680 に答える