为什么SparseIntArray没有实现Map <Integer,Integer>?

Mic*_*per 6 java api collections android

Android SparseIntArray的API文档打开:

SparseIntArrays将整数映射到整数.

我很好奇,那么,为什么它没有实现Map <Integer,Integer>.

在我看来,所有需要的是一些不同的方法名称,一些简单的额外方法,以及一些禁止null键和值的代码......当然,没有任何EnumMap无法处理的优雅.我忽略了什么吗?

这并非旨在向Android API的设计者轻扫.通常当我想到这样的事情时,事实证明这是一个很好的理由,我学到了一些关于语言或平台的知识.

Omk*_*kar 3

SparseIntArray 的 JavaDoc 还说

SparseIntArrays 将整数映射到整数。与普通整数数组不同,索引中可以存在间隙。它的目的是比使用 HashMap 将 Integers 映射到 Integers 具有更高的内存效率,因为它避免了自动装箱键和值,并且其数据结构不依赖于每个映射的额外条目对象。

我们可以得出以下选择 SparseIntArray 而不是 Map< Integer,Integer > 的原因:

  • 由于我们希望在原始整数之间进行映射,因此最好避免自动装箱。
  • 在 Map 中,将对象作为键/值会带来大量的哈希计算、解决哈希冲突、链接单个存储桶中的多个条目等。当我们处理原始键/值对时,这些都是不必要的。请注意,SparseIntArray 带有性能警告。由于值存储在二叉搜索树数组数据结构中,因此插入和删除将是昂贵的操作。因此,对于小数据集来说,它是一个不错的选择。

作为一个侧面,我想说 JavaDoc 应该更具体地说

“SparseIntArrays 将原始整数映射到整数。”

而不是说

“SparseIntArrays 将整数映射到整数。”

  • 对不起; 我不明白这如何回答这个问题。AFAIK,Map 接口没有定义实现如何在引擎盖下工作,也没有定义它的效率如何 - 我相信这就是重点。 (2认同)