Java做一个For循环但是还使用了一个迭代器来链接列表(“For,While”)循环?

时间:2011-03-08 03:02:00

标签: java loops iterator for-loop linked-list

我为基本问题道歉,但我对Java的新见感让我有些沮丧,我无法通过搜索找到一种优雅的方式来做到这一点。

我想使用For构造迭代链表,但也有一个数字迭代器,这样我可以在一定次数的迭代后打破循环。

我有这个LL,我正在迭代:

LinkedList<SearchResult> docSearch;

我尝试这样做,但只有迭代器部分工作(结果总是停留在每次迭代的第一个条目)

for (SearchResult result : docSearch) while (iter2 < 50)  { 

//do stuff
iter2 = iter2 + 1;
}

感谢任何建议

5 个答案:

答案 0 :(得分:2)

如果你必须进行那种检查,那么我只想在块中使用if。

for (SearchResult result : docSearch)  {
  if (iter2 >= 50) break;

  //do stuff
  iter2 += 1;
}

答案 1 :(得分:1)

最好使用常规for..loop语法来处理您的需求

for (int i = 0; i < 50 && i < docSearch.getSize(); i++ ) {
    SearchResult result = docSearch.get(i);
}

仅仅因为Java支持每个循环,并不意味着我们每次都必须使用它。我发现使用常规for..loop语法更容易阅读,你的条件被隔离在一个地方。如果您使用for-each with break,那么您有2个地方会影响您的代码流。

答案 2 :(得分:0)

你在哪里分配了iter2的值?

for (SearchResult result : docSearch) 
{
  int iter2 = 0;
  while (iter2 < 50)  { 

  //do stuff
  iter2 = iter2 + 1;
  }
}

答案 3 :(得分:0)

如果你这样做:

for (SearchResult result : docSearch) while (iter2 < 50)  { 

//do stuff
iter2 = iter2 + 1;
}

与完成此操作完全相同:

for (SearchResult result : docSearch) {

    while (iter2 < 50)  { 

    //do stuff
    iter2 = iter2 + 1;
    }
}

你可以通过多种方式解决这个问题。一个是休息(尽管有些人对此表示不满意。

for (SearchResult result : docSearch) { 
if(iter2 >= 50) break;
//do stuff
iter2 = iter2 + 1;
}

您可以使用标准for循环并将这两个条件放入条件部分

Iterator<SearchResult> iter = docSearch.iterator();
for(SearchResult result = iter.next(); iter.hasNext() && iter2 < 50; result = iter.next()) {
   // do stuff
   iter2 = iter2 + 1;
}

答案 4 :(得分:0)

for (SearchResult result : docSearch)  {
  if (iter2++ >= 50) break;
  //do stuff
}

这里也许是一个增加后期的好地方。 :)