Android SparseIntArray的API文档随后打开:
SparseIntArrays将整数映射到整数。
我很好奇,那么,为什么它没有实现Map<Integer, Integer>。
在我看来,所有需要的是一些不同的方法名称,一些简单的额外方法,以及一些禁止null
键和值的代码......当然没有EnumMap无法处理恩典。我忽略了什么吗?
这不是要在Android API的设计者处轻扫。通常,当我想知道things like this时,结果证明这是一个很好的理由,我会学习一些语言或平台。
答案 0 :(得分:3)
SparseIntArray的JavaDoc也说
SparseIntArrays将整数映射到整数。不像普通的数组 整数,指数可能存在差距。 意图更多 内存效率高于使用HashMap将整数映射到整数, 因为它避免了自动装箱键和值及其数据 结构不依赖于每个映射的额外条目对象。
我们可以推导出以下原因选择SparseIntArray而不是Map&lt;整数,整数&gt; :
作为一个侧面点,我想说JavaDoc应该更具体,说
“SparseIntArrays将原始整数映射为整数。”
而不是说
“SparseIntArrays将整数映射到整数。”
答案 1 :(得分:1)
实施Map
非常繁重。您需要entrySet
和keySet
等方法,这在[{1}}中不方便。
地图键是对象,因此您需要不断装箱/取消装箱。
SparseIntArray
使用特定的SparseIntArray
和Map
建议使用keyAt
枚举valueAt
的不同方式,这种方式非常快。
如果SparseIntArray
已实施Map<Integer, Integer>
,您可能会想写:
Map<Integer, Integer> intMap = new SparseIntArray();
但是,您只会被Map
提供的枚举功能所困扰。
答案 2 :(得分:0)
如果它实现了Map<Integer,Integer>
,则必须将Integer
个对象作为输入和输出值而不是原始int
值处理,所以要避免这个类的整个要点拳击会丢失。