这两个条目都指的是您的Map的相同逻辑条目(其关键字为“A”,值为“B”)。但是,它们不是同一个实例。
如果您在Collections.unmodifiableMap(map)
实施深挖的话,你会看到,在迭代通过Collections.unmodifiableMap(map)
返回地图的entrySet
返回一个新Map.Entry
包装了原修改的条目:
public Map.Entry<K,V> next() {
return new UnmodifiableEntry<>(i.next());
}
我假设在调用set.stream().findFirst().get()
时也会创建一个新实例Map.Entry
实例,因此这两个方法会返回不同的实例。
即使你调用相同的方法两次,你会得到差的情况下,即下面的代码也将打印false
:
Map.Entry<String, String> entry1 = set.iterator().next();
Map.Entry<String, String> entry2 = set.iterator().next();
System.out.println(entry1 == entry2);
在另一方面,如果你直接从获得入境原来HashMap
,你会得到true
:
Map.Entry<String, String> entry1 = map.entrySet().iterator().next();
Map.Entry<String, String> entry2 = map.entrySet().stream().findFirst().get();
System.out.println (entry1==entry2);
如果这种情况下,条目不通过一个新的实例包,这样既entrySet().iterator().next()
和entrySet().stream().findFirst().get()
返回的S一个例子。
不,他们不应该,因为HashMap的entrySet没有排序。 –
@ JBNizet--同意,但我的地图中只有1个元素。 –
地图也不保证它们不会即时创建新的Map.Entry实例。不要用==比较对象。使用equals()。 –