今天用到了map中keySet方法,出现了一个错误,记录下来。
出现错误原因:没有注意到map中keySet方法返回的是一个Set集合镜像,所以在修改该Set集合镜像时,map中所对应的键值对也会相应的被修改。
HashMap中keySet方法源码:
测试类:
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- /**
- * map的keySet()方法
- *
- * @author feige
- */
- public class RemoveSet {
- public static void main(String[] args) {
- Map<Integer, String> testMap = new HashMap<Integer, String>();
- testMap.put(1, "一");
- testMap.put(2, "二");
- testMap.put(3, "三");
- testMap.put(4, "四");
- testMap.put(5, "五");
- Set<Integer> testKey = testMap.keySet();
- Iterator<Integer> it = testKey.iterator();
- System.out.println("移除前map的大小为:" + testMap.size());
- System.out.println("移除前的遍历");
- while (it.hasNext()) {
- Integer testInt = it.next();
- System.out.println(testInt);
- // 移除key为3的键
- if (testInt == 3) {
- it.remove();
- }
- }
- System.out.println("移除了key为3的键");
- System.out.println("移除后map的大小为:" + testMap.size());
- System.out.println("移除后的遍历");
- it = testKey.iterator();
- while (it.hasNext()) {
- Integer testInt = it.next();
- System.out.println(testInt);
- }
- }
- }
测试结果为:
可见map中keySet方法返回的是map中key的镜像,对keySet方法返回的Set的修改就是对map中key的修改。