Java 键组合取值的数据结构设计

Java 键组合取值的数据结构设计,java,data-structures,combinations,Java,Data Structures,Combinations,我有一个问题,我分析并概括到这个级别,我需要解决这个问题以获得高效的性能 我从数据库中收集了大量项目,如1_A_B、2_A、2_B、2_A_C、1_C、1_B、2_B_C等等 现在,当用户选择A(根据返回的数值,他只能选择字母表)时,他需要获得2,因为2_A存在,这意味着在选择A时可以显示2 如果用户选择B,他将同时获得2,1,如果选择B\u C,他将只获得2 输入的顺序是随机的。因此,我应该以多高的效率或哪种数据结构来设计以获得最佳性能并保持最佳内存使用率 我想用Map但是字母组合来显示数字并

我有一个问题,我分析并概括到这个级别,我需要解决这个问题以获得高效的性能

我从数据库中收集了大量项目,如1_A_B、2_A、2_B、2_A_C、1_C、1_B、2_B_C等等

现在,当用户选择A(根据返回的数值,他只能选择字母表)时,他需要获得2,因为2_A存在,这意味着在选择A时可以显示2

如果用户选择B,他将同时获得2,1,如果选择B\u C,他将只获得2

输入的顺序是随机的。因此,我应该以多高的效率或哪种数据结构来设计以获得最佳性能并保持最佳内存使用率

我想用
Map
但是字母组合来显示数字并不容易[B_C和C_B应该返回相同的结果,并且会有很多字母组合]

我会使用

HashMap<String,Integer>
内存使用:O(n)
搜索性能:O(n)

我会使用

HashMap<String,Integer>
内存使用:O(n)

搜索性能:O(n)

我不知道这是否能很好地解决您的问题, 但如果你的字母表相当有限,我会解析每个字母表并将其转换为2的幂

例如,我分配

A = 1 (2^0)
B = 2 (2^1)
C = 4 (2^2)
D = 8 (2^3)
。。等等

然后,我将使用
HashMap
来存储数据。 在HashMap中,key是字母的数值之和,该值成为数据前缀的数字列表

比如说,, 给定
1_A_B、2_A、2_B、2_A_C、1_C、1_B、2_B_C

1_A_B将存储在map[3,{1}]下,2_A将存储在map[1,{2}]下,依此类推。 因此,给定数据集的映射看起来像

3, {1} //1_A_B
1, {2} //2_A
2, {2, 1} //2_B , 1_B
5, {2} //2_A_C
4, {1} //1_C
6, {2} //2_B_C
当输入B_C时,您只需查找值为6(B+C)的键,然后返回2作为答案


上述方法也适用于处理B_C和C_B的情况,因为B_C和C_B的总和是相同的

我不知道这是否能很好地解决你的问题, 但如果你的字母表相当有限,我会解析每个字母表并将其转换为2的幂

例如,我分配

A = 1 (2^0)
B = 2 (2^1)
C = 4 (2^2)
D = 8 (2^3)
。。等等

然后,我将使用
HashMap
来存储数据。 在HashMap中,key是字母的数值之和,该值成为数据前缀的数字列表

比如说,, 给定
1_A_B、2_A、2_B、2_A_C、1_C、1_B、2_B_C

1_A_B将存储在map[3,{1}]下,2_A将存储在map[1,{2}]下,依此类推。 因此,给定数据集的映射看起来像

3, {1} //1_A_B
1, {2} //2_A
2, {2, 1} //2_B , 1_B
5, {2} //2_A_C
4, {1} //1_C
6, {2} //2_B_C
当输入B_C时,您只需查找值为6(B+C)的键,然后返回2作为答案


上述方法也适用于处理B_C和C_B的情况,因为B_C和C_B的总和是相同的

在原来的问题中,字母组合似乎可以有多个值,比如B的“2,1”,例如从一个库中考虑一个HASMAP或MultIMAP。在原来的问题中,字母组合似乎可以具有多个值,例如B的“2,1”。