#java #hashmap
#java #hashmap
Вопрос:
Привет, у меня было требование, чтобы объекты карты были расположены в порядке ключей другой карты. вот карта
Map ObjectMap = new HashMap()
ObjectMap .put(id1,Obj1);
ObjectMap .put(id2,Obj2);
ObjectMap .put(id3,Obj3);
ObjectMap .put(id4,Obj4);
Теперь карта рангов определяет порядок идентификаторов в ObjectMap
Map rankedMap = new HashMap()
rankedMap .put(rank1,id3);
rankedMap .put(rank2,id4);
rankedMap .put(rank3,id1);
rankedMap .put(rank4,id2);
Теперь мне нужно упорядочить объекты ObjectMap, соответствующие рангу каждого идентификатора, например
ObjectMap .put(id3,Obj1);
ObjectMap .put(id4,Obj2);
ObjectMap .put(id1,Obj3);
ObjectMap .put(id2,Obj4);
ids
являются Long
ли объекты
ranks
являются int
ли объекты
Пожалуйста, помогите, заранее спасибо
Комментарии:
1. 1) Объекты в HashMap не упорядочены, поэтому их упорядочивание не имеет никакого смысла. Вы должны использовать список или какую-то связанную карту (например, LinkedHashMap) 2) ‘ObjectMap’ не должен начинаться с прописной буквы ‘O’ 3) какие объекты являются объектами ‘rank’?
2. Для меня это похоже на какое-то злоупотребление хэш-картой. Вы уверены, что вам нужны все эти карты?
Ответ №1:
«rankedMap» должна быть связанной картой, как сказано выше:
Map rankedMap = new LinkedHashMap()
rankedMap .put(rank1,id3);
rankedMap .put(rank2,id4);
rankedMap .put(rank3,id1);
rankedMap .put(rank4,id2);
затем вы можете выполнить итерацию по идентификаторам в rankedMap, чтобы заполнить rankedObjectMap, который также является LinkedHashMap: (код не тестировался)
Map rankedObjectMap = new LinkedHashMap();
for(Object id : rankedMap.values()){
rankedObjectMap.put(id, objectMap.get(id));
}
Ответ №2:
Вы можете попробовать использовать древовидные карты и пользовательские компараторы.
Комментарии:
1. извините, я пропустил -посмотрел, что вы не хотите, чтобы объект оставался сопоставленным с тем же идентификатором.
Ответ №3:
HashMap
не имеет определенного порядка. Если вы хотите упорядочить и по-прежнему использовать время поиска предложений O (1) HashMap
, вы можете использовать LinkedHashMap, но обратите внимание, что порядок на этой карте определяется порядком вставок. Вам придется позаботиться об этом, вставив свои элементы по порядку.