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

发布于 2022-09-06 07:32:32 字数 536 浏览 11 评论 0

现在有两个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类型是自建函数,不是简单的基本数据类型。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萌吟 2022-09-13 07:32:32

建一个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
以往的大感动 2022-09-13 07:32:32

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

妖妓 2022-09-13 07:32:32

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了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文