[英]questions about choosing suitable data structure in Java
我的問題是有3個變量,比如a,b,c
首先,需要輸入和存儲信息a,b,c。
例如a = Tom,b =學校A,c = 1402
然后,我可以通過輸入“Tom”來獲取上述信息,在這種情況下,如果學校B中有另一個Tom,那么該消息也將被打印出來。
或者輸入“Tom,A學校”,然后才會打印出Tom。 在這個問題中,如果a和b都被鎖定,它們將不會重復。
好吧,我的觀點是必須是一個鍵,而一個+ b可以是一個復合鍵。 首先我想到了一個HashMap,但是,HashMap只有一個鍵到一個值。 所以我打算使用2張地圖,但這不能使用復合鍵。
我的想法是否正確? 或者,在這種情況下,是否可以使用Java中更好的數據集合?
謝謝你的時間!
Java中沒有現成的數據結構供您根據需要使用。 Apache Commons和Google Guava Collections中有多值的地圖實現,但核心Java中卻沒有。
但是,在我看來,您可以使用地圖聲明來實現它,例如 - Map<String, List<String>>
或Map<String, List<Student>>
具體取決於您是將學生詳細信息保存為連接字符串還是Student
班。
在填充地圖時 - 您將在地圖中為第一行/學生創建兩個條目,一個用於a
和另一個用於a+b
連接的條目。
然后在為后續行創建條目時,首先應檢查映射中是否存在鍵,如果存在,則獲取值,追加新值並再次存儲。
記錄a=Tom, b=school A, c=1402
將有兩個條目然后記錄a=Tom, b=school B, c=1403
並且你將追加key = Tom
記錄並為TomschoolB
添加一個新條目所以地圖中共有三個條目用於密鑰 - Tom
, TomschoolA
和TomschoolB
。 密鑰Tom
將在值列表中有兩個項目,而其余兩個將具有單個項目。
您的查找代碼應遵循密鑰計算邏輯作為密鑰創建邏輯,即字符串連接或任何其他您希望的事情。
這只是粗略地了解可以通過列表處理多個值。
編輯:從你的評論中,你看起來很困惑,所以下面是實現這個想法的代碼。 您可以根據需要調整和擴展它。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MultiValuedMap {
private static Map<String,List<String>> storage = new HashMap<>();
public static void main(String[] args) {
store("Tom","Tom,schoolA,1402");
store("TomschoolA","Tom,schoolA,1402");
store("Tom","Tom,schoolB,1402");
store("TomschoolB","Tom,schoolB,1403");
storage.forEach((key,value) -> System.out.println("key:"+key+",value:"+value));
}
private static void store(String key, String value){
if(storage.containsKey(key)) {
List<String> newList = storage.get(key);
newList.add(value);
storage.put(key,newList);
}else{
List<String> values = new ArrayList<String>();
values.add(value);
storage.put(key,values);
}
}
}
輸出:
key:Tom,value:[Tom,schoolA,1402, Tom,schoolB,1402]
key:TomschoolB,value:[Tom,schoolB,1403]
key:TomschoolA,value:[Tom,schoolA,1402]
當您對使用任何現有數據結構感到不明確時,我建議您創建自己的數據結構。您可以根據需要創建任何方法和任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.