问题描述
我的探查器状态表明,我花了很大一部分时间来避免将long
包装到Long
中。我之所以这样做,是因为我使用了Map<Long,V>
。有没有通常的方法来创建键为long
的Map?
我知道它不会是Map<long,V>
,因为类型系统不允许这样做,但这并不意味着从long
到V
的映射不存在。实际上,这很容易做到,因为我只需要复制HashMap<K,V>
的代码,将K
替换为long
,并进行类型系统所需的所有更改(例如键上的迭代不再是Iterator<K>
)
我的问题是这样的图书馆是否已经存在,还是我应该自己做?
上下文是我的探查器指出,在进行批处理时,花费了三分之一的时间将long
转换为Long
,并且实际上没有理由接受为此付出代价类型系统
解决方法
不支持将其作为generics does not support primitive types。您也不能创建具有基本类型的类(例如HashMap<int,V>
)。
也许JEP 218 - Generics over Primitive Types将来会寻求解决这个问题。
建议:
- 您是否可以将其余代码更改为首先使用
Long
? - Long类缓存的值从-127到128(code)。探索是否可以在更大范围内使用类似的内部缓存。
http://fastutil.di.unimi.it/是一类完全按照我在这里要求的库