该接口,定义一个键值对实体接口。Map.entrySet 方法返回的 Set集合中的实体就是实现这个 它。只有一种方法可以获得 Map.Entry 对象的引用,那就是通过集合的迭代器。并且 Map.entry 只在迭代期间有效,更加准确的是意思是,如果在获得迭代器以后,修改了集合,那么 Map.Entry 的行为是未定义的1。除非调用 Map.Entry  setValue 设置下修改的值。

API文档中的这段话,说的让我有点费解。修改集合以后,Map.Entry的行为是未定义的,LZ 做了实验,发现并没有触发到什么非法,未定义的操作。

Map<String, String> stringMap = new HashMap<>(16); stringMap.put("key1", "value1"); stringMap.put("key2", "value2"); stringMap.put("key3", "value3"); stringMap.put("key4", "value4"); stringMap.put("key5", "value5"); stringMap.put("key6", "value6"); Iterator<Map.Entry<String, String>> iterator = stringMap.entrySet().iterator(); Map.Entry<String, String> next = iterator.next(); stringMap.remove(next.getKey()); stringMap.put(next.getKey(),"value7");