如何遍历不断增长的java列表

时间:2016-03-08 07:56:52

标签: java android

我有一个java的URL列表。我希望为列表中的每个URL调用一个函数。此功能将URL添加到列表中。 是否可以遍历所有URL,包括列表中新添加的URL?

for(String links: urls) {
    ar = getNews(links);
}

getNews()内有:

urls.add(json.optString("next"));

我使用递归成功完成了这项工作。致电:

getNews(json.optString("next"));

getNews()

2 个答案:

答案 0 :(得分:2)

您可以使用常规for循环并在每次迭代时更改条件

int size = 1;
for (int i = 0 ; i < size ; ++i) {
    ar = getNews(urls.get(i));
    size = urls.size();
}

答案 1 :(得分:1)

使用队列而不是列表:

Queue<String> q = new LinkedList<>();
q.add(initial urls);
while (!q.isEmpty()) {
  String url = q.pop();
  q.addAll(readNews(url));
}

我假设此代码位于readNews方法之外,即此处没有递归。

此外,由于我认为这是某种抓取工具,您可能希望跟踪之前访问过的网址,以避免再次访问它们:

Queue<String> q = new LinkedList<>();
Set<String> visited = new LinkedHashSet<>();
q.add(initial urls);
while (!q.isEmpty()) {
  String url = q.pop();
  if (!visited.contains(url)) {
    visited.add(url);
    q.addAll(readNews(url));
  }
}