使用java中的值列表选择组织数据的数据结构

2023-12-05

我有一个如下所示的地图,其中有一个键,值的类型List:

Map<String, List<String> newdatamap = new HashMap<>();
map.put ("RtyName", Arrays.asList("wpn", "wpfnb", "dgeft", "xbthy"));
map.put ("rtyRate", Arrays.asList("dd", "ww", "trrty", "httyure"))

我想在前一个地图上添加另一个地图,这样就有一个键,其值将是上面的地图。这是正确的数据结构吗?我们如何实现它?

我想要如下所示的东西

Key         Value

B1          RtyName  ----> "weepn", "weepfnb", "eedgeft", "xbteehy"
            rtyRate ----->"deed", "ww", "terrty", "hteetyure"



B2          RtyName  ----> "SSSweepn", "wpefSSSnb", "GGeGdgeft", "xbteYYYYhy"
            rtyRate ----->"WWded", "wTeTYw", "YYYYtrerty", "IIIehttyure"

如上图,只是在map中引入了一个新的key,它的value是之前的map。

所以它就像一个Map<String, Map<String, List<String>>>这变成了一个复杂的数据结构我可以将数据结构组织为 例如一个包含 Map 的类,所以它会像

Map<B1 , RtyName>
Map<B2 ,rtyRate>

和付款人 nae 包含值列表,例如

 RtyName  ----> "SSSweepn", "wpefSSSnb", "GGeGdgeft", "xbteYYYYhy"
  rtyRate ----->"deed", "ww", "terrty", "hteetyure"

因此,在上述结构中,复杂性会很低,因为在 B1 的最后,我必须搜索 RtyName 的密钥,并进一步针对付款人名称,我必须搜索“wpn”、“wpfnb”、“dgeft”、“ xbthy”

请告知地图是否是最好的,或者是否有其他更好的数据结构也可以获取此信息。

我想到的一种数据结构是 Guava 的 Table

  final Table<String, String, List<String>> values = HashBasedTable.create();
values.put("B1", "RtyName", Lists.newArrayList("weepn", "weepfnb", "eedgeft", "xbteehy"));
System.out.println(values.get("B1", "RtyName")); // prints the list

我的目标是我可以拥有的任何数据结构,其中针对 B1,我将获得 Rtyname,对于 Rtyname,我将获得可能的值列表


我会这样做:

Map<Integer, List<String>> dataMap = new HashMap<>();
dataMap.put("B1".hashCode()+"RtyName".hashCode(), Arrays.asList("weepn", "weepfnb", "eedgeft", "xbteehy"));
dataMap.put("B1".hashCode()+"rtyRate".hashCode(), Arrays.asList("deed", "ww", "terrty", "hteetyure"));
dataMap.put("B2".hashCode()+"RtyName".hashCode(), Arrays.asList("SSSweepn", "wpefSSSnb", "GGeGdgeft", "xbteYYYYhy"));
dataMap.put("B2".hashCode()+"rtyRate".hashCode(), Arrays.asList("WWded", "wTeTYw", "YYYYtrerty", "IIIehttyure"));

这将代表:

B1, RtyName  ----> "weepn", "weepfnb", "eedgeft", "xbteehy"
B1, rtyRate ----->"deed", "ww", "terrty", "hteetyure"

B2, RtyName  ----> "SSSweepn", "wpefSSSnb", "GGeGdgeft", "xbteYYYYhy"
B2, rtyRate ----->"WWded", "wTeTYw", "YYYYtrerty", "IIIehttyure"

注意hashCode只是一个方便的功能String满足我需求的课程。你可以自己推出一个返回String如果您愿意的话,可以使用密钥(或其他任何东西)。

实际上,由于您原来的方法不需要独立于顺序的函数,因此您甚至可以连接String用作新密钥的密钥:

dataMap.put("B1"+"RtyName", Arrays.asList(/*your list here*/));

这比第一种方法有点不方便(并且在编程上不如第一种方法“好”),但仍然比嵌套好得多Map类。 (并且在输出时使按键更容易识别hashCode.)

双向映射

值作为键

如果你想要每一个List值映射到键以及相反,您需要第二个Map:

Map<List<String>, String> valueMap = new HashMap<>(); //New map for value->key 
for(String key: dataMap.keySet()) //Get all keys
    valueMap.put(dataMap.get(key), key); //Create mapping value->key

每个项目的值都是一个键

如果你想要每一个String中的项目values要映射到的列表keys反之亦然,你需要第二个Map:

Map<String, String> itemMap = new HashMap<>(); //New map for item->key mapping
    for(String key: dataMap.keySet()) //Get all keys and iterate through
        for(String item: dataMap.get(key)) //For each item in your value list
            itemMap.put(item, key); //Create new mapping item->key
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用java中的值列表选择组织数据的数据结构 的相关文章

随机推荐