java实现这道题,数据结构算法怎么高效怎么来

数据一:
id=1000001 a="aValue" b="bValue" c="cValue"
id=1000002 e="eValue" f="fValue" g="gValue" h="hvalue"

数据二:
id=1000001 a="A" b="B" c="C"
id=1000002 e="E" f="F" g="G" h="H"

结果:
id=1000001 A="aValue" B="bValue" C="cValue"
id=1000002 E="eValue" F="fValue" G="gValue" H="hvalue"

拿数据二中的value值替换成数值一的key值
数据一数据二根据id可以对应

----------------- 补充数据格式 -----------
都是List里面可以能有很多数据
数据一:
[
    {
        "id": "1000001",
        "a": "aValue",
        "b": "bValue",
        "c": "cValue"
    },
    {
        "id": "1000002",
        "e": "eValue",
        "f": "fValue",
        "g": "gValue",
        "h": "hvalue"
    }
]
---------------------------------------
数据二:
[
    {
        "id": "1000001",
        "a": "A",
        "b": "B",
        "c": "C"
    },
    {
        "id": "1000002",
        "e": "E",
        "f": "F",
        "g": "G",
        "h": "H"
    }
]
---------------------------------------
结果:
[
    {
        "id": "1000001",
        "A": "aValue",
        "B": "bValue",
        "C": "cValue"
    },
    {
        "id": "1000002",
        "E": "eValue",
        "F": "fValue",
        "G": "gValue",
        "H": "hvalue"
    }
]
阅读 1.7k
2 个回答

数据一转换成Map: {id -> {key, value}},然后遍历数据二

全部用 json 包起来的,你早给出来啊,再让我想想吧。


以下为原回答:

你得先说下你的数据一和数据二分别是用什么数据结构存储的。我猜测可能是下面两个:

  1. 都是数组存储,id 作为数组下标。这样的处理会很简单,O(n) 遍历一次就可以,直接根据下标去取另一个数据集的 value。
  2. 都是 map 存储,id 作为 key,后面的值作为 value。

    1. 数据量万级。就用上面 @iknight 的回答就可以,暴力简单,复杂度 log(n) * log(n)
    2. 如果百万级甚至更多。我建议先【遍历】数据二,将遍历到的地址保存在一个链表或者就一个数组中,然后【遍历】数据一。数据集一 走一步,链表就 next 一下。复杂度 log(n),最简单的空间换时间。(注:这两个【遍历】应该调用同一个接口,不出意外应该是中序遍历,会以 key 的降序或升序输出遍历结果。)

就你当前的这种需求的话,数据一和数据二的最佳存储结构应该是 hashtable,这样问题就简单很多。

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