Java中HashMap和SparseArray的数据结构

本文探讨了Java中HashMap和SparseArray的数据结构。HashMap是数组与链表的组合,而SparseArray是为节省内存并保持内容值的稀疏数组,内部包含mKeys和mValues两个数组成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近听同事说使用SparseArray代替HashMap可以提高性能,于是边对这两个类的数据结构进行简单的分析。

Hashmap的数据结构 

Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示:


图片来源:Java的HashMap和HashTable

SparseArray的数据结构

    SparseArray指的是稀疏数组(Sparse array),为了节省内存空间,并且不影响数组中原有的内容值。其内部有两个关键成员,分别是mKeys和mValues, 都是数组,如下所示:

查看其 put(int key, E value),如下:

public void put(int key, E value) {
    int i = ContainerHelpers.binarySearch(mKeys, mSize, key);

    if (i >= 0) {
        mValues[i] = value;
    } else {
        i = ~i;

        if (i < mSize && mValues[i] == DELETED) {
            mKeys[i] = key;
            mValues[i] = value;
            return;
        }

        if (mGarbage && mSize >= mKeys.length) {
            gc();

            // Search again because indices may have changed.
            i = ~ContainerHelpers.binarySearch(mKeys, mSize, key);
        }

        mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
        mValues = GrowingArrayUtils.insert(mValues, mSize, i, value);
        mSize++;
    }
由此可见,SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的类, 其核心是折半查找函数(binarySearch),这样可以加快查找效率,但有数据插入或删除时,效率不见得高。内存效率应该和HashMap差不多,不能直观判断出好坏,需要分情况讨论。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值