我应该关心 trove4j 中的 no_entry_value 吗?

Should I care about no_entry_value in trove4j?

我将 trove4j 用于其原始集合。我注意到它有像

这样的构造函数
public TLongArrayList( int capacity, long no_entry_value )

其中 no_entry_value 表示空值。默认值为零。

集合中的空值,特别是Set,按照我的认知是很重要的。但是看了源码发现trove4j并没有怎么用到这个值

所以我很困惑我应该关心那个值。我应该精心挑选一个永远不会出现在我的程序中的值,还是让它默认为零。

这是您在需要时知道自己需要的东西之一。这归结为您是否只想调用 get(...) 并在不调用 containsKey(...) 的情况下知道该值是否在地图中。这就是“无条目值”出现的地方,因为这是在您没有将该键存储在地图中的情况下返回的内容。默认值为 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
}

与每次执行 get 之前调用 containsKey 相比,这是一个性能改进。