我使用trove4j作为它的原语集合。我注意到它有类似的构造函数
public TLongArrayList( int capacity, long no_entry_value )其中no_entry_value表示null。默认值为零。
根据我的认知,集合中的空值,就像特别设置的一样,是非常重要的。但是在我浏览了源代码之后,我发现trove4j并没有使用这个值。
所以我不知道我是否应该关心这个价值。我应该精心挑选一个永远不会出现在我的程序中的值,还是把它保留为默认的零。
发布于 2022-04-01 14:49:05
这是当你需要的时候你知道你需要的东西之一。这取决于您是否只想调用get(...),并知道该值是否在映射中而不调用containsKey(...)。这就是"no值“出现的原因,因为在没有将该键存储在地图中的情况下,返回的就是这个值。默认值为0,因此,如果您从未在映射中存储0值,这将适用于检查。但当然,这可能有点冒险。典型的值是0,-1,Integer.MAX_VALUE.像那样的事。
如果地图中没有您可以保证永远不会存在的值,那么在信任返回的值之前,您需要确保使用containsKey进行检查。您可以将执行两次查找的开销降到最低,如下所示:
int value = my_map.get( my_key );
// NOTE: Assuming no entry value of 0
if ( value == 0 && !my_map.containsKey( my_key ) ) {
// value wasn't present
}
else {
// value was present
}与每次在执行containsKey之前调用get相比,这都提高了性能。
https://stackoverflow.com/questions/71701788
复制相似问题