当前位置: 首页 > 面试题库 >

使用map.get()时使用Java Map.containsKey()冗余

太叔鹏云
2023-03-14
问题内容

我一直想知道,在最佳实践中,是否允许不使用containsKey()on方法java.util.Map,而是对from的结果进行空检查get()

我的理由是,重复两次查找值似乎是多余的:首先对进行查找,containsKey()然后对进行查找get()

另一方面,可能是大多数标准实现都Map缓存了最后一次查找,或者编译器可以通过其他方式消除冗余,并且对于代码的可读性而言,最好保留该containsKey()部分。

非常感谢您的评论。


问题答案:

一些Map实现被允许具有空值,例如HashMap,在这种情况下,如果get(key)返回null,则不能保证地图中没有与此键关联的条目。

因此,如果您想知道地图是否包含键use
Map.containsKey。如果仅需要映射到键的值,请使用Map.get(key)。如果此映射允许空值,则返回值null不一定表示该映射不包含键的映射;否则,返回0。在这种情况下Map.containsKey是没有用的,并且会影响性​​能。此外,在并发访问地图的情况下(例如ConcurrentHashMap),在测试之后,您Map.containsKey(key)有可能在调用之前由另一个线程删除该条目Map.get(key)



 类似资料:
  • 一段时间以来,我一直想知道,在最佳实践中,是否可以避免在< code>java.util.Map上使用< code>containsKey()方法,而是对< code>get()的结果进行空检查。 我的理由是,对值进行两次查找似乎是多余的——第一次是对< code>containsKey()进行查找,然后再次对< code>get()进行查找。 另一方面,可能是大多数的标准实现缓存了最后的查找,或

  • 我有一个,它传递给了一个Thymeleaf页面。我把这张地图放在页面上,我可以访问它。 如何使用thymeleaf执行?我只需要获取基于某个键的值,然后解析并打印该值,我知道该值并具有逻辑。 我正在运行一个Broadleaf应用程序,而Thymeleaf是它的UI引擎。

  • 问题内容: 我有一个客户端库,在该客户端库中对我的REST服务进行http远程调用,然后返回给客户,该客户正在调用我的库,其中包含从REST服务获得的响应以及所有错误(如果包装了任何错误)围绕对象。 这是我的枚举类: 这是我的枚举类: 如您所见,在我的课堂上我有很多领域,因此我有一个很长的构造器,每次当我做一个对象的时候都会有很大的联系。将来我可能会有更多的字段,但目前只有这些字段。 有什么更好的

  • 有没有办法在使用 jongo 查询 MongoDB 时添加 ?我发现这样的错误 - '排序超出了 104857600 字节的内存限制,但没有选择加入外部排序。正在中止操作。传递 allowDiskUse:true 可以选择加入,可以通过以下方式阻止,您的聚合看起来像 但据我所知,Jongo 中的类仅将管道应用于自身,然后您可以使用 方法执行。 是否有任何方法可以将该参数传递给mongo而不从Jon

  • 问题内容: 我使用spring数据和方法来获取模型。调用此方法时如何使用查询提示? 上面的源代码工作正常,但是我不能为我的JPA提供程序(在我的情况下为EclipseLink)设置QueryHint。 以上是我使用spring-data使用查询提示的方式, 我还发现了这个尚未解决的问题。 问题答案: 当我想使用spring-data创建查询时,请遵循上述算法。 1)是否已经提供的查询 通过弹簧数据

  • 我使用spring数据和方法获取模型。调用此方法时如何使用查询提示 上面的源代码运行良好,但我无法为我的JPA提供者(在我的例子中是EclipseLink)设置QueryHint。 我使用spring数据使用查询提示的方式如下:, 我也发现这个还没有解决。