参见英文答案 > Map.get() optimization in ?: ternary operator 3个
我有一个HashMap< Foo,ArrayList< Bar>>当我得到一个与键相关联的ArrayList并为其添加一些值时,我希望这样.
三元运算符
我目前正在做的是检查与键Foo相关联的值是否为空,如果是,则将新的ArrayList添加到我想要的内容并将其放回到地图中.如果没有,我存储他们arrayList添加我想要的东西,然后再将它放回到地图中.
我可以这样做:
ArrayList valuesList = map.get(key);
if(valuesList == null){
valuesList = new ArrayList;
}
valuesList.add(Item);
map.put(Foo,valuesList);
但我更喜欢使用三元运算符来使我的代码更短一些:
ArrayList valuesList= (map.get(key) == null) ? new ArrayList() : map.get(key);
valuesList.add(Item);
map.put(Foo,valuesList);
我的问题是,(在第二个)示例我是否执行了两次map.get(key)?或者Java编译器是否很聪明并只评估一次? (我知道它在执行速度方面存在细微差别,但如果它执行两次,这足以让我开始使用示例1)
解决方法:
以下是我使用的内容,因为如果列表已经在您的地图中,您也不会不必要地调用put:
List valuesList = map.get(key);
if(valuesList == null){
valuesList = new ArrayList();
map.put(key,valuesList);
}
valuesList.add(Item);
注意,我发现这比使用三元运算符更具可读性(更少的代码行不一定更简单,恕我直言).根据地图的大小,节省不必要的电话(获取和放置)可能并不简单.
标签:java,ternary-operator
来源: https://codeday.me/bug/20190824/1712374.html