java 大量数据的两个map的value做比较

现在有两个map,每个map的数量是百万级,两个map完全一致。
现在要对比两个map,删除第二个map中和第一个Map的value一致,但是key不一致的第二个之后的数据数据。
举例说明:
map1有<1,a>,<2,b>,<3,a>,<4,b>,<5,c>,<6,d>,<7,a>,<8,c>,<9,c>
map2有<1,a>,<2,b>,<3,a>,<4,b>,<5,c>,<6,d>,<7,a>,<8,c>,<9,c>
执行程序以后,map1不变,map2变为<1,a>,<2,b>,<5,c>,<6,d>

我已经有一版代码,思路是两个遍历嵌套,等于是百万*百万的循环。
因为目前这个执行效率太慢,所以想请教一下大家有没有更好的思路或者改进方法。

新增说明:map的value类型是自建函数,不是简单的基本数据类型。

阅读 10.3k
3 个回答

建一个key和value反转的map

Map<String,String> map = new HashMap<String,String>();
    map.put("1","A");
    map.put("2","B");
    map.put("3","A");
    map.put("4","B");
    map.put("5","C");

Map newMap = new HashMap<>();

Iterator<String> it = map.keySet().iterator();
    while (it.hasNext()) {
        String key = it.next();
        String value = map.get(key);
        newMap.put(value,key);
    }
    newMap.forEach((k,v)->{
        System.out.println(k+"  "+v);
    });
    
    

输出

A  3
B  4
C  5

只要再建立一个 value 作为 key 的 map 就好了。从头至尾遍历一遍,也就是 O(n) 的复杂度

Map<String,X> map = new HashMap<>();
// 数据填充好
Map<String,X> tempMap = new HashMap<>();
for(Entry<String,X> entry : map.entrySet()){

tempMap.put(entry.getValue(),entry.getKey());

}
这样就不用再拿Key去找Value了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题