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 个钥匙的地图。第一个键决定了我的"second 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 调用,但这无关紧要。我的目标是,每个字符串(第一个键)都将保存一个具有特定值(我的方法中的第二个字符串)的特定整数(第二个键)。
当然,我希望每个 String 都以 0 开头,并有自己的时间顺序。但请记住,您不能在 class 的开头使用普通的 Integer-var,因为如果您对每个键都使用它,它就无法解决我的问题。
如果我没理解错的话,'inner map'(类型为 Map<Integer, String>
的)将始终遵守以下规则:
地图的键将始终覆盖从 0 到其大小的封闭范围。例如,大小为 8 的内部映射将具有作为键:`[0, 1, 2, 3, 4, 5, 6, 7].
假设我正确地解析了你的问题,你.... 列出了一个列表。一个列表 IS 从语义上讲就是: 'maps' 一个从 0 到值的封闭整数范围的东西。要从此 'map' 读取与 'key' 5 关联的值,您只需调用 list.get(5)
。要 'add' 末尾的项目,您只需调用 list.add(x)
而不是 map.put(???, x)
。
因此,答案很简单:将 Map<Integer, String>
替换为 List<String>
,将 (a)->new HashMap<>()
替换为 a->new ArrayList<>()
,将 .put(/*my problem*/,
替换为 .add(
.
如果你必须用 maps 做这个,你不能用 hashmaps 做,除非你尝试使用 map.size() 作为一个脆弱的替身,我强烈建议你不要这样做(因为那样会暗示你的地图只在列表更好的情况下工作,从而证明地图解决方案是劣质的)——哈希图没有顺序,因此不知道 'what is the last / highest key'。您可以改用 TreeMap,它确实有这样的概念。你可以向它询问最高键,然后使用比它高1。
但我很确定你只是想要一个列表。
我正在 Java 中编写程序。这个程序应该处理很多不同的值。我决定使用 HashMap,如您所见:
public static Map<String, Map<Integer, String>> users = new HashMap<>();
所以,如您所见,我有一张带有 2 个钥匙的地图。第一个键决定了我的"second 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 调用,但这无关紧要。我的目标是,每个字符串(第一个键)都将保存一个具有特定值(我的方法中的第二个字符串)的特定整数(第二个键)。 当然,我希望每个 String 都以 0 开头,并有自己的时间顺序。但请记住,您不能在 class 的开头使用普通的 Integer-var,因为如果您对每个键都使用它,它就无法解决我的问题。
如果我没理解错的话,'inner map'(类型为 Map<Integer, String>
的)将始终遵守以下规则:
地图的键将始终覆盖从 0 到其大小的封闭范围。例如,大小为 8 的内部映射将具有作为键:`[0, 1, 2, 3, 4, 5, 6, 7].
假设我正确地解析了你的问题,你.... 列出了一个列表。一个列表 IS 从语义上讲就是: 'maps' 一个从 0 到值的封闭整数范围的东西。要从此 'map' 读取与 'key' 5 关联的值,您只需调用 list.get(5)
。要 'add' 末尾的项目,您只需调用 list.add(x)
而不是 map.put(???, x)
。
因此,答案很简单:将 Map<Integer, String>
替换为 List<String>
,将 (a)->new HashMap<>()
替换为 a->new ArrayList<>()
,将 .put(/*my problem*/,
替换为 .add(
.
如果你必须用 maps 做这个,你不能用 hashmaps 做,除非你尝试使用 map.size() 作为一个脆弱的替身,我强烈建议你不要这样做(因为那样会暗示你的地图只在列表更好的情况下工作,从而证明地图解决方案是劣质的)——哈希图没有顺序,因此不知道 'what is the last / highest key'。您可以改用 TreeMap,它确实有这样的概念。你可以向它询问最高键,然后使用比它高1。
但我很确定你只是想要一个列表。