Bescottee苦しいときは伸びてるとき、楽なときは伸びていないとき

2 android4.3(API 18)で追加されたSparseLongArrayクラス

admin to Android SDK, development — Tags: ,  

SparseLongArray Class

Android4.3(API revel 18)から SparseLongArray というクラスが追加されていました。
API reference は以下にあります。

http://developer.android.com/reference/android/util/SparseLongArray.html


ソースコードは以下にあります。(Developer Collaboration Projectを運営されている皆様、いつも利用させて頂きありがとうございます)

http://tools.oesf.biz/android-4.3.0_r2.1/xref/frameworks/base/core/java/android/util/SparseLongArray.java

クラスの実装内容

ソースコードを見てみると、以下のようなクラスの定義になっています。19行目の import を見ると、ArrayUtilsのメソッドを利用しているようなので POJO ではないようです。

import com.android.internal.util.ArrayUtils;
public class SparseLongArray implements Cloneable {

    private int[] mKeys;
    private long[] mValues;
    private int mSize;

このクラスは、int をキーとし、Long を Value とする map のようです。 key に int を利用することによって高速なvalueの取得を実現するためのもののようです。
そのkeyの検索を実現しているのが以下のbinarySearchメソッドです。

    private static int binarySearch(int[] a, int start, int len, long key) {
        int high = start + len, low = start - 1, guess;

        while (high - low > 1) {
            guess = (high + low) / 2;

            if (a[guess] < key)
                low = guess;
            else
                high = guess;
        }

        if (high == start + len)
            return ~(start + len);
        else if (a[high] == key)
            return high;
        else
            return ~high;
    }

このクラスは以下のモジュールで利用されています。

ざっとみたところ、数値データの保存用のBinaryHashMapに利用されているようです。簡単な作りになっていますが、ふとこれってスレッドセーフになっているのかしら?と疑問が湧きました。以上。

LongSparseLongArray.java というクラスも @hide ながら追加されいたりします。

コメントをどうぞ