2 回答

TA贡献1853条经验 获得超9个赞
例如,我会用一些随机字符串替换 MIDDLE
"A|4806369425|B" : "[some data M]"
"A|0848833569|B" : "[some data N]"
"A|5514390566|B" : "[some data P]"
添加另一个映射
"1" : "4806369425"
"2" : "4806369425"
"3" : "4806369425"
"4" : "4806369425"
"5" : "0848833569"
"6" : "0848833569"
"7" : "5514390566"
"8" : "5514390566"
"9" : "5514390566"
...
"13" : "5514390566"
当获取一个值时,我会去第二个映射找到中间的键。它应该在 O(1) 中执行,然后将左右连接并在 O(1) 中再次从第一个映射中获取一些数据

TA贡献2080条经验 获得超4个赞
您可以尝试类似的方法(未经测试的代码):
String testString = "A|1,2,3,4|B"
String primarySeparator = "|";
String secondarySeparator = ",";
public boolean contains(String key) {
String[] parts = testString.split(primarySeparator);
List<String> values = Arrays.asList(parts[1].split(secondarySeparator)); // Point 1
String[] keyParts = key.split(primarySeparator);
if (keyParts[0].equals(parts[0])
&& keyParts[2].equals(parts[2]
&& values.contains(keyParts[1])) { // Point 2
return true;
} else {
return false;
}
}
标记为“Point 1”的行使用“|”分割字符串 分隔符,选择第二个值,这是您的数字列表,使用“,”分隔符将其拆分并将其转换为列表。因此,您会得到一个列表,其中包含您在“中间”中的所有值。
然后,在“第 2 点”,我们测试匹配。
请记住,此代码未经测试,不关心意外情况,例如如果您的字符串没有正确数量的由“|”分隔的部分 或者如果您的值列表不包含任何值。您可能需要调整以将这些情况考虑在内。
如果你想测试大量的行,你当然应该只拆分一次密钥。
添加回答
举报