【问题标题】:Java HashMap add key +1 to every new Value?Java HashMap为每个新值添加键+1?
【发布时间】:2020-08-12 05:27:16
【问题描述】:

我正在用 Java 编写程序。这个程序应该处理很多不同的值。我决定使用 HashMap,你可以在这里看到:

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

所以,如您所见,我有一张带有 2 个键的地图。第一个键决定我的“第二个 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 语句中是一个注释。我不知道我应该在那里写什么?此方法由另一个类调用,但这无关紧要。我的目标是,每个字符串(第一个键)都将保存一个具有某个值(我的方法中的第二个字符串)的某个整数(第二个键)。 当然,我希望每个字符串都以 0 开头,并按时间顺序排列。但是请记住,您不能在课程开始时使用普通的 Integer-var,因为如果您应该对每个键都使用它,它不会解决我的问题。

【问题讨论】:

    标签: java string hashmap integer key-value


    【解决方案1】:

    如果我理解正确,“内部地图”(类型为 Map&lt;Integer, String&gt; 的地图)将始终遵守以下规则:

    地图的键将始终覆盖从 0 到其大小的封闭范围。例如,大小为 8 的内部映射将作为键:`[0, 1, 2, 3, 4, 5, 6, 7]。

    假设我正确地解析了你的问题,你....列了一个清单。一个列表 IS 在语义上准确地说是:一个从 0 开始“映射”整数的封闭范围到值的东西。要从此“映射”中读取与“键”5 关联的值,只需调用list.get(5)。要在最后“添加”一个项目,您只需调用 list.add(x) 而不是 map.put(???, x)

    因此,答案很简单:将Map&lt;Integer, String&gt; 替换为List&lt;String&gt;,将(a)-&gt;new HashMap&lt;&gt;() 替换为a-&gt;new ArrayList&lt;&gt;(),并将.put(/*my problem*/, 替换为.add(

    如果您必须使用地图执行此操作,则不能使用哈希图执行此操作,除非您尝试使用 map.size() 作为易碎的替代品,我强烈建议您不要这样做(因为这仅意味着您的地图在列表更好的情况下工作,从而证明映射解决方案较差) - 哈希映射没有顺序,因此不知道“什么是最后一个/最高的键”。您可以改用 TreeMap,它确实有这样的概念。你可以问它最高的key,然后用比它高的1。

    但我很确定你只是想要一个列表。

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      相关资源
      最近更新 更多