如何更新一个值,给定一个键在由LinkedLists组成的java哈希映射



这是我的HashMap:

HashMap<String, LinkedList<LinkedList<String>>> partitionMap = new HashMap<String, LinkedList<LinkedList<String>>>();

我知道使用put方法可以工作,像:

hashmap.put(key, hashmap.get(key) + 1);

但是在这个例子中我们有Integer,在我的例子中我有LinkedList<LinkedList<String>>>

有同样的方法吗?

put仍然工作相同。你可以在地图上添加一对新的String,LinkedList<LinkedList<String>>:

LinkedList<LinkedList<String>> aList = new LinkedList<LinkedList<String>>();
hashmap.put("aString", aList);

或者更简洁地说

hashmap.put("aString", new LinkedList<>());

然后修改地图中的链表,get它,然后修改它。

hashmap.get("aString").add(new LinkedList<String>());

你不需要把修改过的列表放回映射中。当您在映射中获得对列表的引用时,您正在修改映射中当前的列表。


作为题外话,你确定你想要一个LinkedList<LinkedList<String>>吗?访问外部LinkedList中的任意LinkedList将花费线性时间,这意味着编辑其中一个嵌套LinkedList的内容将花费(最好的情况)线性时间,并且可能像二次元一样糟糕。

我建议使用ArrayList<List<String>>(或者实例化为ArrayList<List<String>>List<List<String>>)。这样,您就可以在固定时间内访问任意嵌套列表,并且在嵌套列表中使用的特定List实现是开放的。

当然可以:

LinkedList<LinkedList<String>>> list = hashmap.get(key);
LinkedList<LinkedList<String>>> updatedList = updateListValue(list);
hashmap.put(key, updatedList);

现在,updateListValue(LinkedList<LinkedList<String>>> list)的代码当然取决于您所说的"更新值"的含义。

如果您正在使用Java8+,您可以使用compute, computeIfPresentcomputeIfAbsent方法

    HashMap<String, LinkedList<LinkedList<String>>> partitionMap = new HashMap<String, LinkedList<LinkedList<String>>>();
    partitionMap.computeIfAbsent("key-1", key -> new LinkedList<>()); //add
    System.out.println(partitionMap);
    partitionMap.computeIfPresent("key-1", (key, value) -> {value.add(new LinkedList<>()); return value;}); //update
    System.out.println(partitionMap);

compute*方法将返回值

输出
{key-1=[]}
{key-1=[[]]}

相关内容

  • 没有找到相关文章

最新更新