Java 每个值LinkedHashMap运行多次的迭代

Java 每个值LinkedHashMap运行多次的迭代,java,xstream,Java,Xstream,我让XStream使用以下xml为我构建链接哈希映射: <linked-hash-map> <entry> <string>#!/masterofsoundtrack/broadcast</string> <broadcast> <attributes class="linked-hash-set"/> <url>#!/masterofsoundtrack/broadcast</u

我让XStream使用以下xml为我构建链接哈希映射:

<linked-hash-map>
 <entry>
  <string>#!/masterofsoundtrack/broadcast</string>
  <broadcast>
    <attributes class="linked-hash-set"/>
    <url>#!/masterofsoundtrack/broadcast</url>
    <name>MasterofSoundtrack</name>
    <description></description>
    <startsClosed>false</startsClosed>
  </broadcast>
 </entry>
 <entry>
  <string>MasterofSoundtrack</string>
  <broadcast reference="../../entry/broadcast"/>
 </entry>
</linked-hash-map>
我正在运行managers.add()行两次。如果我调试并查看地图,它们有不同的ID,但看起来相同。这是XStream中的一个bug,还是getValues()中的一些我不理解的东西?

HashMap=new HashMap();
对象o=新对象;
地图放置(“1”,o);
地图放置(“2”,o);
System.out.print(map.values().size())//打印2

只要键是唯一的,那么不管值是否相等,每个值都会有一个单独的条目。

如果哈希映射中有两个条目,则使用
HashMap\getValues
可以得到两个值。为什么getValues()会返回指向同一对象的两个指针?如果我想迭代条目,我会迭代键集,而不是值,因为HashMap就是这样工作的。键是唯一的,不能保证值的唯一性。仅返回唯一的值在计算上更为昂贵,并且对于包含的用例来说不够通用。如果您想要一个唯一的值集,那么您必须自己解析它(可能使用HashSet)。
for(Broadcast broadcast: map.getValues()){
    managers.add(new Manage(broadcast));
}
HashMap<String, Object> map = new HashMap<>();
Object o = new Object;
map.put("1", o);
map.put("2", o);
System.out.print(map.values().size()) //prints 2