簡體   English   中英

Java是否在執行For循環,但同時對Linked List(“ For,While”)循環使用迭代器?

[英]Java doing a For loop but also using an iterator for Linked List ( “For, While”) Loop?

我為基本問題表示歉意,但是我對Java的新穎性使我感到有些沮喪,並且無法從搜索中找到一種優雅的方式來做到這一點。

我想使用For構造遍歷鏈接列表,但也想擁有一個數字迭代器,以便在經過一定數量的迭代后可以中斷循環。

我要遍歷此LL:

LinkedList<SearchResult> docSearch;

我嘗試這樣做,但是只有迭代器部分有效(每次迭代的結果始終停留在第一個條目上)

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

//do stuff
iter2 = iter2 + 1;
}

任何建議表示贊賞

如果您必須進行這種檢查,那么我只需在塊中使用if進行檢查。

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

  //do stuff
  iter2 += 1;
}

最好使用常規的for..loop語法來滿足您的需求

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

僅僅因為Java支持for-each循環,並不意味着我們必須每次都使用它。 我發現使用常規for..loop語法更容易閱讀將條件隔離在1個地方的情況。 如果將for-each與break一起使用,則有2個地方會影響代碼流。

您在哪里分配了iter2的值?

嘗試

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

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

如果您這樣做:

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;
}
for (SearchResult result : docSearch)  {
  if (iter2++ >= 50) break;
  //do stuff
}

這也可能是后期增量的好地方。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM