Java 更优化的TreeMap::ComputeFabSent方法
我正在使用树映射来存储从long到long树集的映射。插入新元素时,我使用以下代码:Java 更优化的TreeMap::ComputeFabSent方法,java,treemap,Java,Treemap,我正在使用树映射来存储从long到long树集的映射。插入新元素时,我使用以下代码: treeMap.computeIfAbsent(key,k -> new TreeSet<>()).add(val); treeMap.computeIfAbsent(key,k->newtreeset()).add(val); 但是,查看此函数的源,它会获取元素,如果键不存在,则计算新值,并将计算出的值放入映射中。这意味着它会两次找到键的位置。我使用的地图非常大,性能非常关键。不幸的是,
treeMap.computeIfAbsent(key,k -> new TreeSet<>()).add(val);
treeMap.computeIfAbsent(key,k->newtreeset()).add(val);
但是,查看此函数的源,它会获取元素,如果键不存在,则计算新值,并将计算出的值放入映射中。这意味着它会两次找到键的位置。我使用的地图非常大,性能非常关键。不幸的是,我不能扩展这个类,因为所有必需的变量都是私有的
是否有一个具有更高效的ComputeFabSent的TreeMap实现?我建议在您尝试优化此功能之前,您应该衡量此功能的影响。使用JVisualVM中的探查器,并确定使用ComputeFabSent的函数是否占用大量时间。如果密钥类型的散列函数不是太大,我猜查找密钥的速度会非常快complicated@JFMeier经进一步检查,显然该函数对算法性能的影响最小。谢谢你的提示!如果确实需要性能,请查看库。它包含
Long2ObjectAvlTreeMap
和Long2ObjectRBTreeMap
。选择最适合您的用例的。