Floatでjava.lang.Mathの各メソッド使うのは無駄だからandroid.util.FloatMath使えとか、Map<Integer, E>は無駄だからSparseArray使えとか。
私自身FloatMathは知っていたけれどSparseArrayはListViewのマルチチョイスモードで選択位置の取得の返り値がSparseBooleanArrayってことくらいしか知らなかったので、SparseArrayについてのメモ。
注)大分適当です
Q. SparseArrayって何?
A. キーがintでListっぽくもMapっぽくも使える何か。
Q. どう使うの?
A. Map<Integer, E>をそのままSparseArray
Q. キー一覧や値一覧ってどうやって取得するの?
A. forループやwhileで回して頑張れ。
値がBooleanやIntegerの場合にはSparseBooleanArrayやSparseIntegerArrayが実装されているのでそっちを使おう。
あんまりJavaの内部のことを知らないのでintとIntegerがどれくらい違うのかが分からないのだけれど、Androidで利用する分にはパフォーマンスが上がるのでしょう。
SparseArrayは内部で
private int[] mKeys;
private Object[] mValues;
private int mSize;
を管理していて、SparseArray#putで中身を突っ込むとキーと値がそれぞれに格納される。Parcelに突っ込むときはParcel#writeSparseArrayってメソッドがあるのでそれを使うか、sizeとkey、valueをループ回して突っ込もう(Parcel#writeSpaseArrayの中身はループ回してるだけなので)。逆もしかり。
###
SparseArrayは日本語に訳すと疎な配列。それぞれの値に関連性が薄いんでしょう。