这是我的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
, computeIfPresent
和computeIfAbsent
方法
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=[[]]}