【发布时间】:2018-11-07 01:01:01
【问题描述】:
我有一个方法允许我从ArrayList 创建一个HashMap,方法是获取AirbnbListing 对象,然后将邻居名称与HashMap 中的任何键进行比较。如果它还没有在 hashmap 中,我会添加一个从 1 开始的计数器,如果它已经存在,我会增加计数器。
这里有没有更有效的方法是我的代码:
public HashMap<String, Integer> sortHousesInNbrhood(ArrayList<AirbnbListing> priceRangeListing) {
HashMap<String, Integer> housesInNbrhood = new HashMap<>();
for (AirbnbListing listing : priceRangeListing) {
if (housesInNbrhood.isEmpty()) {
housesInNbrhood.put(listing.getNeighbourhood(), 1);
} else if (housesInNbrhood.containsKey(listing.getNeighbourhood())) {
housesInNbrhood.replace(listing.getNeighbourhood(), housesInNbrhood.get(listing.getNeighbourhood()) + 1);
} else {
housesInNbrhood.put(listing.getNeighbourhood(),1);
}
}
return housesInNbrhood;
}
【问题讨论】:
-
这里的问题是,什么对你来说“更有效率”?更快的执行时间?少量编译的字节码?有很多指标可以用来衡量效率。
-
由于当今的服务器资源非常丰富,请考虑多一些代码以提高可读性(可读性更高)。因为让开发人员(包括几个月后的您自己)想知道代码的作用是低效的,因为您太努力地将其精简为“聪明的”缩短。
-
啊,我会修改我的问题,最好是更快的执行时间。
-
这就是我的意思。如果它更具可读性,那就这样做,如果它是相同的并且更少的代码就这样做。如果它的可读性较差,请不要这样做,因为与可能导致开发时间不得不找出原本完全可以的东西相比,您在执行时间上节省的纳秒是微不足道的 :)
-
有不同的选项来解决这个问题,它们在可读性上没有太大差异,但在性能上可能会有显着的差异。我在stackoverflow.com/a/29127257/3182664 中对一个非常相似的案例的不同选项进行了比较
标签: java sorting arraylist hashmap counter