当我们使用相同的地图输入功能时,为什么要引入for循环

时间:2015-03-27 13:00:24

标签: java

当我们有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());
        }


    }   

}

3 个答案:

答案 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循环概念中不可用时:

  1. remove()选项在Iterator中可用。
  2. 快速失败并且Iterator概念中提供了Fail Safe迭代器。

答案 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);
}