码迷,mamicode.com
首页 > 编程语言 > 详细

Java中HashMap和SparseArray的数据结构

时间:2015-05-25 20:27:28      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:jdk   java   

    最近听同事说使用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差不多,不能直观判断出好坏,需要分情况讨论。


Java中HashMap和SparseArray的数据结构

标签:jdk   java   

原文地址:http://blog.csdn.net/bigconvience/article/details/45973131

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!