gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:11 24 4
gpt4 key购买 nike

我有一个如下所示的 map ,其中有一个键,值的类型为 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"))

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

我想要如下所示的东西

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>>> whis 变成了一个复杂的数据结构,我可以将数据结构组织为例如一个包含 Map 的类,所以它就像

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

和 payer nae 包含值列表,例如

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

所以在上面的结构中,复杂性会很低,因为在 B1 的最后,我必须搜索将是 RtyName 的键,并进一步搜索付款人姓名,我必须搜索值,这将是“wpn”、“wpfnb”、“dgeft” ", "xbthy"

请告知 whheteher map 将是最好的,或者是否有任何其他更好的数据结构也可以获得这个。

我想到的一个数据结构是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 类要好得多。 (并且使 key 在输出时比 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

值中的每个项目作为键

如果您希望 values 列表中的每个 String 项映射到 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

关于java - 在 Java 中使用值列表选择用于组织数据的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30814228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com