LimeQAQ
V2EX  ›  Java

list<map>合并问题,面试题

  •  
  •   LimeQAQ · Jun 22, 2021 · 4013 views
    This topic created in 1969 days ago, the information mentioned may be changed or developed.

    今天面试,问了个题没答上来。。。

    题目: 有 listA<map>例如[{"a1":""},{"a2":""},{"a3":""}...],数据量 10W 条

    和 listB<map>例如[{"a1":"aaaa"},{"a3":"ssss"},{"a4":"dddd"}...],数据量 15W 条

    listA 中 map 的 key 和 listB 中 map 的 key 有些相同,现需要把 listA 里面的和 listB 里面的 key 相同的合并,保留 listB 里面非空的 map,例如合并后为[{"a1":"aaaa"},{"a2":""},{"a3":"ssss"},{"a4":"dddd"}...]

    数据量比较大,不让用双层循环。

    这个怎么做啊。。。没思路

    16 replies  •  2021-06-26 00:08:53 +08:00
    plutono
    plutono
    Jun 22, 2021
    1
    双指针
    sigma65535
    sigma65535
    Jun 22, 2021
    2
    遍历 listA,转换成 mapA {"a1":"","a2":"","a3":""}
    遍历 listB,更新 mapA 的值
    再把 mapA -> listA 的形式
    vindac
    vindac
    Jun 22, 2021
    3
    没看懂,对于 ListA<Map>中的所有的 Map 中每个 Entry 的 key 都不一样吗
    LimeQAQ
    LimeQAQ
    OP
    Jun 22, 2021
    4
    @vindac 每个都不一样的,互相之间没有关系
    Vegetable
    Vegetable
    Jun 22, 2021
    5
    双层循环肯定不行啊,爆炸了
    2 次循环加一个就行了。
    先循环一个 List 建立 key:index 的对应 Map,将寻找 A 或 B 中元素的时间复杂度降到 O(1),再循环另一个 List,将结果合并,Map 里边的 key:index 可能要删掉。
    你有些细节没说,具体在特殊处理就好了
    Vegetable
    Vegetable
    Jun 22, 2021
    6
    *加一个 Map
    bxb100
    bxb100
    Jun 22, 2021
    7
    有序双指针, 无序 Map 映射
    LimeQAQ
    LimeQAQ
    OP
    Jun 22, 2021
    8
    @sigma65535 用 listB 覆盖掉 mapA 中的值?人家说不是想要的答案,我问他提示一下,人家还不说。。。
    vindac
    vindac
    Jun 22, 2021
    9
    @LimeQAQ 每个都不一样,直接 ListA 拆成一个 MapA,ListB 拆成一个 MapB,遍历 Map 就行了吧。。
    sigma65535
    sigma65535
    Jun 22, 2021
    10
    @LimeQAQ 不说,还有这种奇葩,不去这公司也罢
    zm8m93Q1e5otOC69
    zm8m93Q1e5otOC69
    Jun 22, 2021
    11
    相当于把 Pair 换成 Map 呗
    lovelive1024
    lovelive1024
    Jun 22, 2021
    12
    List<Map> 转为 Map<String, Map>
    xylophone21
    xylophone21
    Jun 22, 2021
    13
    空间换时间转 Map,不允许换先排序
    payboy
    payboy
    Jun 23, 2021
    14
    listA.addAll(listB)
    listA.stream.filter(Objects::nonNull).collect(Collectors.toMap(k, v, (v1, v2) -> (v1 + v2))
    tedzhou1221
    tedzhou1221
    Jun 23, 2021
    15
    我天天写这鬼东西。虽然数据量不大。也就是和 #2 差不多的方式。
    DreamSpace
    DreamSpace
    Jun 26, 2021 via Android
    16
    可能是想考察 StreamAPI ?如果 listA,listB 泛型相同,用 Stream 连接起来做 reduce
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2534 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 11:09 · PVG 19:09 · LAX 03:09 · JFK 06:09
    ♥ Do have faith in what you're doing.