在android中, 如果可能, 请优先考虑SparseArray族(稀疏数组)代替HashMap:
SparseArray HashMap<Integer, Object>
SparseBooleanArray HashMap<Integer, Boolean>
SparseIntArray HashMap<Integer, Integer>
SparseLongArray HashMap<Integer, Long>
给出的优点: 比HashMap省很多内存; 没有装箱拆箱; 与equals()和hashCode()无关; 对于小容量情况(小于1000), 速度与HashMap相差不大;
不过可能的缺点: 不工作在非android项目上; 速度比HashMap慢(SparseArray使用两个数组, 其添加、查找、删除数据都需要先进行一次二分查找), 不适合大容量的情况; 当然你也可以尝试trove.jar;

在android中, 如果可能, 请优先考虑ArrayMap/ArraySet代替HashMap/HashSet:
1. ArraySet不是由ArrayMap实现(HashSet是由HashMap实现), 整体上ArraySet/ArrayMap比HashSet/HashMap轻量级的多;
2. 将Key的hash存在一个int[]数组里, 表明Key的唯一性, 而不是用作hash查找算法, 将Key/Value都存在Object[]类型的数组里, 如果Key存在索引i上, 则Value存在i+1的位置上, 使用二分查找在int[]中找到对应hash所在的index, 然后由index映射到对应Object[]的某个索引位置, 进而得到Key/Value;
3. 为了KeySet, 有必要在Object[]中存储Key;
4. ArrayMap/ArraySet会更积极地控制底层数组的大小增长, 因为它只要求复制数组条目, 而不是像HashMap/HashSet那样重建一个哈希映射;
5. 和SparseArray族一样, 比HashMap/HashSet更省内存, 但在大容量情况, 速度比HashMap/HashSet慢, 其中一个原因是为了节省内存, ArrayMap/ArraySet可能在删除操作时, 压缩底层数组, HashMap/HashSet取胜的另一个关键是hash查找算法比二分查找高效, 但前提是一个好的hash算法函数和一个大的容器空间以减少hash碰撞;
6. 如果你不需要Java类库里的标准容器API(比如迭代器等), 可以考虑使用支持库里的SimpleArrayMap, 后者没有实现java.util.Map接口;

注: 对于大容量的情况, 请务必关注构造器capacity的设置, 它对性能的影响至关重要;

更多相关文章

  1. Java android ios 通用可逆des加密算法
  2. android 字符串数组资源
  3. Android jni中数组参数的传递方式
  4. 情况控件Android layout_weight用法图解
  5. Android intent 传递数组对象序列化
  6. android 图片与byte数组间的转换
  7. 至2013年5月初android各个版本市场占有情况
  8. Android高性能编码三:数据结构和算法优化

随机推荐

  1. Android(安卓)popupWindow点击某个控件在
  2. 使用android内置相机拍照
  3. Android中在fragment A里面点击button跳
  4. Android(安卓)AGP 3.6.3 迁移4.0.0问题 N
  5. 简叙 Activity 生命周期及android 返回按
  6. Android(安卓)时间戳转换
  7. 在android下获取有线和无线IP地址的方法,
  8. Android菜单的定义及ActionBar的实现
  9. android camera开发笔记
  10. Android之selector