Java HashMap将一个新值附加到向量的优化方法,该向量是HashMap<String,vector<String>>中的值
类似于在C++中添加新元素到向量的类似方法:-
myHashMap[myKey].push_back(newElement); //push newElement to the value vector directly
在Java中,我能想到的唯一方法是从hashmap中获取向量。将新字符串附加到向量,然后使用新向量再次设置键
myValue = myHashMap.get(myKey);
/**Check if the key exists
**/
//If exists
myValue.add(newElement);
myHashmap.put(myKey, myValue);
第二种方法是否与前一种方法一样快?如果没有,是否还有其他方法?谢谢
# 1 楼答案
首先,如果您关心Java中的性能,请使用
ArrayList
而不是Vector
。正如javadoc所说:所以,假设我们使用java 8(和^ {CD1>}),C++代码有两种翻译。p>
版本#1。适用于Java 5+
版本#2。适用于Java 8+
哪个更快?您需要测试它才能确定,但我认为第二个版本应该更快一些,因为它避免了
put
调用中的第二个hashmap查找1行代码比6行代码整齐。(YMMV的可读性。这取决于阅读代码的人,以及他们对Java 8+语言功能和API的熟悉程度。)
# 2 楼答案
在java中也可以用同样的方法来实现。
myHashMap.get(key).add(newValue)
因为在hashmap中,列表的引用(或者你可以说它是向量)存储为值。因此,修改列表的内容不会影响引用。您可以想象这个引用类似于C++中的向量的64位地址。p># 3 楼答案
不必将向量放回地图中,因为添加到地图中时已经在修改向量
是通过
(假设
myHashMap.get(myKey)
不返回null)可以在Map界面中使用
computeIfAbsent
为第一次处理的密钥构造向量对象。这更优雅,不需要if块函数(
k -> new Vector<>()
)仅在myHashMap
没有键key
的映射时执行。它的好处是返回key
的向量值,这样我们就可以对add
调用进行链接