如何根据其他地图键重新排列地图中的项目

时间:2011-10-31 08:33:25

标签: java hashmap

您好我要求安排地图的对象 按照另一张地图的键的顺序。 这是地图

Map ObjectMap = new HashMap()
ObjectMap .put(id1,Obj1);
ObjectMap .put(id2,Obj2);
ObjectMap .put(id3,Obj3);
ObjectMap .put(id4,Obj4);

现在,等级地图决定了ObjectMap中的ID顺序

Map rankedMap = new HashMap()

rankedMap .put(rank1,id3);
rankedMap .put(rank2,id4);
rankedMap .put(rank3,id1);
rankedMap .put(rank4,id2);

现在我必须根据每个ID的等级排列ObjectMap对象,如

ObjectMap .put(id3,Obj1);
ObjectMap .put(id4,Obj2);
ObjectMap .put(id1,Obj3);
ObjectMap .put(id2,Obj4);

idsLong个对象

ranksint个对象

请提前致谢

3 个答案:

答案 0 :(得分:2)

'rankingMap'应该是链接的地图,如上所述:

Map rankedMap = new LinkedHashMap()

rankedMap .put(rank1,id3);
rankedMap .put(rank2,id4);
rankedMap .put(rank3,id1);
rankedMap .put(rank4,id2);

接下来,您可以遍历rankingMap中的id来填充rankingObjectMap,它也是一个linkedHashMap :(代码未经过测试)

Map rankedObjectMap = new LinkedHashMap();
for(Object id : rankedMap.values()){
  rankedObjectMap.put(id, objectMap.get(id));
}

答案 1 :(得分:1)

HashMap没有明确的排序。如果您想要订购,并且仍然有利于HashMap提供的O(1)寻道时间,您可能需要使用LinkedHashMap,但请注意,此地图中的排序是按插入顺序定义的。您必须按顺序插入元素来处理它。

答案 2 :(得分:1)

您可以尝试使用TreeMaps和自定义比较器。