Как изменить порядок элементов на карте на основе других ключей карты

#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, но обратите внимание, что порядок на этой карте определяется порядком вставок. Вам придется позаботиться об этом, вставив свои элементы по порядку.