今天用到了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的修改。