如果我運行下面的代碼,它會打印出3次重複的內容,但是當我在while循環中刪除if語句(只是看它會迭代多少次)時,它會啓動一個無限循環。瞭解Java迭代器
實際上這個hasNext()
方法是如何工作的?我認爲這隻會迭代5次,因爲我在列表中有5個項目。
public class ExerciseOne {
public static void main(String []args){
String []colors = {"MAGENTA","RED","WHITE","BLUE","CYAN"};
List<String> list = new ArrayList<String>();
for(String color : colors)
list.add(color);
String[] removeColors = {"RED","WHITE","BLUE"};
List<String> removeList = new ArrayList<String>();
for(String color : removeColors)
removeList.add(color);
removeColors(list,removeList);
System.out.printf("%n%nArrayList after calling removeColors:%n");
for(String color : list)
{
System.out.printf("%s ",color);
}
}
private static void removeColors(Collection<String> collection1, Collection<String> collection2)
{
Iterator<String> iterator = collection1.iterator();
while(iterator.hasNext()){
if(collection2.contains(iterator.next()))
System.out.println("duplicate");
}
}
}
您是否閱讀過文檔? – tnw
'hasNext'不移動迭代器遊標,'iterator.next()'移動它,所以當你刪除了條件時,你實際上移除了遊標變化 –
當然是的,「如果迭代有更多元素則返回true」,但我無法理解什麼時候它到達列表的末尾,爲什麼它繼續循環,我會嘗試找到一些其他的教程或文檔,因爲那個來自oracles的對我來說不是那麼清楚 – Tano