簡體   English   中英

關於在Java中選擇合適的數據結構的問題

[英]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添加一個新條目所以地圖中共有三個條目用於密鑰 - TomTomschoolATomschoolB 密鑰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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM