【发布时间】:2015-06-14 00:59:19
【问题描述】:
我有一个如下所示的地图,其中有一个键和值的类型为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>>> whis 变成了一个复杂的数据结构,我可以将数据结构组织为
例如一个包含地图的类,所以它会像
Map<B1 , RtyName>
Map<B2 ,rtyRate>
和 payer nae 包含值列表,例如
RtyName ----> "SSSweepn", "wpefSSSnb", "GGeGdgeft", "xbteYYYYhy"
rtyRate ----->"deed", "ww", "terrty", "hteetyure"
因此,在上述结构中,复杂性会很低,因为在 B1 的最后,我必须搜索将是 RtyName 的密钥,并针对付款人名称进一步搜索值,这些值将是“wpn”、“wpfnb”、“dgeft” ", "xbthy"
请告知地图是否最好,或者是否有其他更好的数据结构也可以获得这个。
我想到的一个数据结构是 Guava's 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,我将获得可能的值列表
【问题讨论】:
-
为什么不声明一个简单的 POJO,其中包含
Rtyname和rtyRate的两个列表,并将该类的对象放入映射而不是嵌套映射和列表? -
看起来很合理。除了复杂性,还有哪些问题?您是否需要在不知道 B1 或 B2 密钥的情况下访问成员?当您拥有一组有限的已知值时,请考虑使用
enum而不是String -
为了选择数据结构,首先要写下要求,尤其是插入、删除和搜索的形式。
-
您的最后一个示例表明您只需要可以使用两个标识符/键组合来引用的列表。如果是这种情况(是这种情况吗?),最好有一个函数,以哈希函数的方式,根据这两个值(并且与顺序无关)生成一个键,然后简单地使用此函数引用单个
Map<String, List<String>数据结构。 -
@ROman vottner 能否请您展示一下,假设创建了一个名为 ABC 的 pojo,并创建了 Rtyname 和 rtyRAte 的两个列表,那么我将如何管理
标签: java data-structures