2013-08-14 2 views
0

У меня есть 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 ​​()?

+0

Если у вас есть две записи на хэш-карте, вы получите два значения с помощью 'HashMap # getValues'. – Aurand

+0

Почему getValues ​​() возвращает два указателя на один и тот же объект? Если бы я хотел перебирать записи, я бы перебирал keySet, а не значения. –

+0

Так как работает HashMap. Ключи уникальны, нет никакой гарантии уникальности значений. Возвращение только уникальных значений является более вычислительно дорогостоящим и не является достаточно общим для использования. Если вы хотите установить уникальное значение, вам придется самостоятельно его проанализировать (возможно, с помощью HashSet). – Aurand

ответ

2
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 

Пока ключи уникальны, вы получите отдельную запись для каждого значения, независимо от равенства значений.

 Смежные вопросы

  • Нет связанных вопросов^_^