У меня есть XStream строительство Linked Hash Map для меня, используя этот XML:Итерация работает более чем один раз в значение LinkedHashMap
<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>
Примечание: если вы не понимаете, что XStream должен делать, он преобразует XML к объектам. Вышеупомянутый XML означает иметь связанную карту хэша с двумя ключами, указывающими на один и тот же объект.
Однако, когда я итерация через это, используя следующий код:
for(Broadcast broadcast: map.getValues()){
managers.add(new Manage(broadcast));
}
Я бег линии managers.add() дважды. Если я отлаживаю и просматриваю карту, у них разные идентификаторы, но они выглядят одинаково. Это ошибка с XStream или что-то, что я не понимаю с помощью getValues ()?
Если у вас есть две записи на хэш-карте, вы получите два значения с помощью 'HashMap # getValues'. – Aurand
Почему getValues () возвращает два указателя на один и тот же объект? Если бы я хотел перебирать записи, я бы перебирал keySet, а не значения. –
Так как работает HashMap. Ключи уникальны, нет никакой гарантии уникальности значений. Возвращение только уникальных значений является более вычислительно дорогостоящим и не является достаточно общим для использования. Если вы хотите установить уникальное значение, вам придется самостоятельно его проанализировать (возможно, с помощью HashSet). – Aurand