当我们有lop时,为什么我们在代码之后使用迭代器,有些工作作为结果由iterator提供
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, String> hasmap = new HashMap<String, String>();
hasmap.put("1", "Java");
hasmap.put("2", ".Net");
hasmap.put("3", "C++");
hasmap.put("4", "Pearl");
hasmap.put("5", "PHP");
for (Entry<String, String> entry : hasmap.entrySet()) {
System.out.println("For Loop Get Key"+entry.getKey());
System.out.println("For Loop Get Value"+entry.getValue());
}
Set set = hasmap.entrySet();
Iterator itr = set.iterator();
while(itr.hasNext()){
Map.Entry map = (Entry) itr.next();
System.out.println(map.getKey());
System.out.println(map.getValue());
}
}
}
答案 0 :(得分:3)
您帖子中的迭代循环版本是历史使用的问题;在Java 1.5中引入了foreach循环。
在此之前,使用Iterator
构造(已经可用since Java 1.2)实现了foreach循环。
使用Iterator
的一个原因是它的.remove()
方法,它可以安全地删除一个元素,而不会抛出ConcurrentModificationException
,只要在迭代时修改了一个循环,就会抛出该元素(这是Java中不允许的。)
另一方面,Java中的简单foreach循环是只读的,但更简洁,通常会产生更清晰,更易于阅读的代码:
for (String str : array) {
System.out.println(str);
}
与
Iterator<String> arrayItr = array.iterator();
while (arrayItr.hasNext()) {
String str = arrayItr.next();
System.out.println(str);
}
答案 1 :(得分:0)
从我的观点来看,当我们考虑下面的迭代器是迭代器的优点而在for循环概念中不可用时:
答案 2 :(得分:0)
从这个回答:How does the Java 'for each' loop work?
for-each
循环只能遍历作为数组的对象或Iterable
的实例。因此,iterator
循环中使用了对象的for-each
,但是您不能调用i.remove()
,因为只是推断了迭代器。
for(Iterator<String> i = someList.iterator(); i.hasNext(); ) {
String item = i.next();
System.out.println(item);
}