2 回答

TA貢獻1853條經(jīng)驗 獲得超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"
當獲取一個值時,我會去第二個映射找到中間的鍵。它應(yīng)該在 O(1) 中執(zhí)行,然后將左右連接并在 O(1) 中再次從第一個映射中獲取一些數(shù)據(jù)

TA貢獻2080條經(jīng)驗 獲得超4個贊
您可以嘗試類似的方法(未經(jīng)測試的代碼):
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”的行使用“|”分割字符串 分隔符,選擇第二個值,這是您的數(shù)字列表,使用“,”分隔符將其拆分并將其轉(zhuǎn)換為列表。因此,您會得到一個列表,其中包含您在“中間”中的所有值。
然后,在“第 2 點”,我們測試匹配。
請記住,此代碼未經(jīng)測試,不關(guān)心意外情況,例如如果您的字符串沒有正確數(shù)量的由“|”分隔的部分 或者如果您的值列表不包含任何值。您可能需要調(diào)整以將這些情況考慮在內(nèi)。
如果你想測試大量的行,你當然應(yīng)該只拆分一次密鑰。
添加回答
舉報