迭代器

package Map;

import java.util.HashMap;
import java.util.Set;

public class demo {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("a",1);
        map.put("b",2);
        map.put("c",3);
        Set<String> keys = map.keySet();

        for (String key : keys) {
            System.out.println(map.get(key));//1 2 3
        }
    }
}

如果此时在遍历过程中对数据进行删除,会报错

因为删除后还是两条数据,但Set不知道,它还认为有3条数据,它还会继续遍历。
for循环是不能在循环时对数据进行添加和删除的,因为会改变数据的个数

要想在循环中改变数据的数目,可以用迭代器

package Map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class demo {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("a",1);
        map.put("b",2);
        map.put("c",3);
        Set<String> keys = map.keySet();

        Iterator<String> iterator = keys.iterator();
        //hasNext方法用于判断是否有下一条数据
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(map.get(key));//1 2 3
        }
    }
}
package Map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class demo {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("a",1);
        map.put("b",2);
        map.put("c",3);
        Set<String> keys = map.keySet();

        Iterator<String> iterator = keys.iterator();
        //hasNext方法用于判断是否有下一条数据
        while(iterator.hasNext()){
            String key = iterator.next();
            if("b".equals(key)){
                iterator.remove();//迭代器删除该条数据
                //iterator.remove("c");
                // 迭代器只能删除当前的数据,无法删除其他的数据,如循环的下一条数据"c"
                // 防止非法删除
            }
            System.out.println(map.get(key));
        }
    }
}
posted @ 2023-02-22 15:35  ben10044  阅读(13)  评论(0编辑  收藏  举报