import java.util.*;
public class IteratorDemo {
public static void main(String args[]) {
// Create an array list
ArrayList al = new ArrayList();
// add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
// Use iterator to display contents of al
System.out.print("Original contents of al: ");
Iterator itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
}
}
我不明白。如果al.iterator()
返回al
的第一个元素,为什么如果我在itr.next()
中放置element
(应该是我猜的第二个)然后打印element
它会打印第一个元素而不是第二个元素?
我是java的新手。与c / c ++并行,Iterator就像指针一样,Iterator.next()就像解引用指针一样?当我在代码中执行操作时,有人可以向我解释实际上在低级别发生了什么吗?
调用iterator()
会返回列表中元素的迭代器,而不是第一个元素。事实上,如果这返回了第一个元素,那么条件while(itr.hasNext())
就没有任何意义。
只有当你调用next()
时才会返回迭代中的下一个元素。
所以,如果你想排除第一个元素,那么你需要做:
if(itr.hasNext()) itr.next();
在循环之前。
另外,作为一个旁边我建议你使用参数化类型而不是原始类型,即你的ArrayList
应该被声明为ArrayList<String> al = new ArrayList<>();
而你的迭代器应该被称为Iterator<String> itr = al.iterator();
。
鉴于在这种情况下你想要做的就是将元素打印到控制台,根本不需要使用Iterator,因为它更简单:
al.forEach(element -> System.out.print(element + " "));
al.iterator()
(javadoc)将Iterator返回到集合(在本例中为您的ArrayList)而不是第一个元素。然后你使用迭代器迭代集合的元素(使用hasNext
和next
)