[英]storing 3 values like hashmap using key and value
我正在嘗試使用其屬性存儲一個臨時值,如示例中所示:
String -> IN_LOBBY -> true
IN_MID_GAME -> false
IN_DEATHMATCH -> false
我像這樣制作了 hashmap 但不知道如何使用它:
HashMap<String, HashMap<String, Boolean>> games = new HashMap<>();
該函數的屬性有點像 HashMap。 我知道該怎么做,我需要幫助。
Map
如果您不需要訪問特定於HashMap
的任何方法,則可以僅使用Map
定義您的 map 。 這樣做使您能夠在不破壞調用代碼的情況下更改您對特定Map
實現的選擇。
Map < String, Map < SportMode, Boolean > > games = new HashMap <>();
從您的示例看起來, IN_LOBBY
等值可以定義為枚舉。 當您在編譯時已知的可能值數量有限時,枚舉是合適的。 使用枚舉提供類型安全,確保有效值,並使您的代碼更具自我記錄性。 請參閱Oracle 的教程。
package work.basil.example;
public enum SportMode
{
IN_LOBBY , IN_MID_GAME , IN_DEATHMATCH
}
如果您想要嵌套不可修改的地圖,請使用Map.of
9 及更高版本中的 Map.of。
Map.of
方法提供簡單的文字語法,傳遞一系列鍵值對。 在我們的例子中,這些對是字符串,map,字符串,map,...。
games.put(
"Alice" ,
Map.of( SportMode.IN_LOBBY , Boolean.TRUE , SportMode.IN_MID_GAME , Boolean.FALSE , SportMode.IN_DEATHMATCH , Boolean.FALSE )
);
games.put( "Bob" , Map.of( SportMode.IN_LOBBY , Boolean.TRUE , SportMode.IN_MID_GAME , Boolean.TRUE , SportMode.IN_DEATHMATCH , Boolean.FALSE ) );
games.put( "Carol" , Map.of( SportMode.IN_LOBBY , Boolean.TRUE , SportMode.IN_MID_GAME , Boolean.TRUE , SportMode.IN_DEATHMATCH , Boolean.TRUE ) );
轉儲到控制台。
System.out.println( "games.toString(): " + games );
games.toString(): {Bob={IN_DEATHMATCH=false, IN_LOBBY=true, IN_MID_GAME=true}, Alice={IN_DEATHMATCH=false, IN_LOBBY=true, IN_MID_GAME=false}, Carol={IN_DEATHMATCH=true, IN_LOBBY=true, IN_MID_GAME=真}}
如果您的嵌套映射必須是可修改的,我仍然會使用Map.of
來獲取其方便的文字語法,但將其提供給另一個Map
實現的構造函數。 在我們的例子中,嵌套的 map 的鍵是在枚舉中定義的,因此請使用EnumMap
,因為它針對快速速度和低 memory 使用率進行了高度優化,並以枚舉定義的順序保持其鍵。
Map < String, Map < SportMode, Boolean > > games = new HashMap <>();
games.put(
"Alice" ,
new EnumMap <>(
Map.of( SportMode.IN_LOBBY , Boolean.TRUE , SportMode.IN_MID_GAME , Boolean.FALSE , SportMode.IN_DEATHMATCH , Boolean.FALSE )
)
);
games.put( "Bob" , new EnumMap <>( Map.of( SportMode.IN_LOBBY , Boolean.TRUE , SportMode.IN_MID_GAME , Boolean.TRUE , SportMode.IN_DEATHMATCH , Boolean.FALSE ) ) );
games.put( "Carol" , new EnumMap <>( Map.of( SportMode.IN_LOBBY , Boolean.TRUE , SportMode.IN_MID_GAME , Boolean.TRUE , SportMode.IN_DEATHMATCH , Boolean.TRUE ) ) );
games.toString(): {Bob={IN_LOBBY=true, IN_MID_GAME=true, IN_DEATHMATCH=false}, Alice={IN_LOBBY=true, IN_MID_GAME=false, IN_DEATHMATCH=false}, Carol={IN_LOBBY=true, IN_MID_GAME=true, IN_DEATHMATCH=真}}
修改第一個嵌套的 map 的第三個元素。
games.get( "Alice" ).replace( SportMode.IN_DEATHMATCH , Boolean.TRUE );
games.toString(): {Bob={IN_LOBBY=true, IN_MID_GAME=true, IN_DEATHMATCH=false}, Alice={IN_LOBBY=true, IN_MID_GAME=false, IN_DEATHMATCH=true}, Carol={IN_LOBBY=true, IN_MID_GAME=true, IN_DEATHMATCH=真}}
Map
實現如果您想保持Alice
、 Bob
和Carol
鍵的排序順序,請使用SortedMap
/ NavigableMap
實現,例如外部 map 的TreeMap
。
如果要保留將鍵添加到外部 map 的順序,請使用LinkedHashMap
。
你可以像這樣使用它:
games.put("string", new HashMap<String, Boolean>());
games.get("string").add("In_lobby", true); // here we get the hashmap that corresponds do string and we add "in_lobby" to it
//... etc
您可以使用Map
的put
和get
方法來添加或檢索鍵和值。
HashMap<String, HashMap<String, Boolean>> games = new HashMap<>();
HashMap<String, Boolean> values = new HashMap<>();
values.put("IN_LOBBY", true);
values.put("IN_MID_GAME", false);
values.put("IN_DEATHMATCH", false);
games.put("String", values);
System.out.println(games.get("String").get("IN_MID_GAME"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.