簡體   English   中英

Java HashMap 將鍵 +1 添加到每個新值?

[英]Java HashMap add key +1 to every new Value?

我正在 Java 中編寫程序。 這個程序應該處理很多不同的值。 我決定使用 HashMap,你可以在這里看到:

public static Map<String, Map<Integer, String>> users = new HashMap<>();

所以,如您所見,我有一個帶有 2 個鍵的 map。 第一個鍵決定我的“第二個 HashMap”。 我希望你明白這一點,因為現在這是我的問題。

public class test {

public static Map<Plot, Map<Integer, Player>> users = new HashMap<>();
public void test(String first, String second) {

if(users.get(first).isEmpty() {
users.computeIfAbsent(first, (a)->new HashMap<>()).put(0, null);
}

if(!users.get(first).containsValue(second)) {
users.computeIfAbsent(first, (a)->new HashMap<>()).put(/*my problem*/, second);
    }
  }
}

所以,在最后一個 if 語句中是一個注釋。 我不知道我應該在那里寫什么? 此方法由另一個 class 調用,但這沒關系。 我的目標是,每個字符串(第一個鍵)都將保存一個具有某個值(我的方法中的第二個字符串)的某個 Integer(第二個鍵)。 當然,我希望每個字符串都以 0 開頭,並按時間順序排列。 但是請記住,您不能在 class 的開頭使用普通的 Integer-var,因為如果您對每個鍵都使用它,它不會解決我的問題。

如果我理解正確,“內部地圖”(類型為Map<Integer, String>的地圖)將始終遵守以下規則:

地圖的鍵將始終覆蓋從 0 到其大小的封閉范圍。 例如,大小為 8 的內部 map 將具有以下鍵:`[0, 1, 2, 3, 4, 5, 6, 7]。

假設我正確地解析了你的問題,你....做了一個列表 一個列表在語義上就是這樣:一個從 0 開始“映射”一個封閉的整數范圍到值的東西。 要從此“映射”中讀取與“鍵”5 關聯的值,只需調用list.get(5) 要在最后“添加”一個項目,您只需調用list.add(x)而不是map.put(???, x)

因此,答案很簡單:將Map<Integer, String>替換為List<String> ,將(a)->new HashMap<>()替換為a->new ArrayList<>() ,然后替換.put(/*my problem*/,使用.add( .

如果您必須使用地圖執行此操作,則不能使用哈希映射執行此操作,除非您嘗試使用 map.size() 作為易碎的替代品,我強烈建議您不要這樣做(因為這意味着您的 map 僅在某些情況下有效其中列表會更好,從而證明 map 解決方案較差) - 哈希圖沒有順序,因此不知道“什么是最后一個/最高密鑰”。 您可以改用 TreeMap,它確實有這樣的概念。 你可以問它關於最高的密鑰,然后使用比它高的 1。

但我很確定你只是想要一個列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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