私はアンドロイドで開発するのは初めてです。私のAndroidアプリでは使用しHashMap
ていますが、警告が表示されます。
**"Use new SparseArray<String>(...) instead for better performance"**
これはどういう意味ですか、SparseArray<String>
代わりにどのように使用できますか?
SparseArray<String>(...)
パフォーマンスを向上させるために、代わりにnewを使用してください
ここで説明されている理由により、この警告が表示されます。
SparseArraysは整数をオブジェクトにマップします。オブジェクトの通常の配列とは異なり、インデックスにギャップがある可能性があります。これは、HashMapを使用して整数をオブジェクトにマップするよりも効率的であることを目的としています。
今
SparseArrayの使い方は?
あなたは以下の方法でそれを行うことができます:
HashMap
仕方:
Map<Integer, Bitmap> _bitmapCache = new HashMap<Integer, Bitmap>();
private void fillBitmapCache() {
_bitmapCache.put(R.drawable.icon, BitmapFactory.decodeResource(getResources(), R.drawable.icon));
_bitmapCache.put(R.drawable.abstrakt, BitmapFactory.decodeResource(getResources(), R.drawable.abstrakt));
_bitmapCache.put(R.drawable.wallpaper, BitmapFactory.decodeResource(getResources(), R.drawable.wallpaper));
_bitmapCache.put(R.drawable.scissors, BitmapFactory.decodeResource(getResources(),
}
Bitmap bm = _bitmapCache.get(R.drawable.icon);
SparseArray
仕方:
SparseArray<Bitmap> _bitmapCache = new SparseArray<Bitmap>();
private void fillBitmapCache() {
_bitmapCache.put(R.drawable.icon, BitmapFactory.decodeResource(getResources(), R.drawable.icon));
_bitmapCache.put(R.drawable.abstrakt, BitmapFactory.decodeResource(getResources(), R.drawable.abstrakt));
_bitmapCache.put(R.drawable.wallpaper, BitmapFactory.decodeResource(getResources(), R.drawable.wallpaper));
_bitmapCache.put(R.drawable.scissors, BitmapFactory.decodeResource(getResources(),
}
Bitmap bm = _bitmapCache.get(R.drawable.icon);
お役に立てば幸いです。
SparseArray
キーとしてを使用している場合に使用されInteger
ます。
を使用するSparseArray
場合、キーとしてaが必要な場合とは異なり、キーは常にプリミティブ変数として残ります。これにより、オブジェクトを取得している間、intがオブジェクトになるのは短時間です。地図。HashMap
Object
Integer
を使用することで、ガベージコレクターSparseArray
の作業を節約できます。
したがって、のように使用しMap<Integer,String>
ます。
これは、コードのデータ構造が優れていることを示唆しています。
そのヒントはLintからのものです。HashMap
あなたが何か他のものに整数を持っているとき、あなたは通常それを手に入れます。
その最大の利点は、整数キーをプリミティブとして扱うことです。つまり、Integer
(Javaオブジェクト)をキーとして使用することはできません。
これは、大きなマップを使用する場合に大きな問題になります。HashMap
その場合、多くのInteger
オブジェクトが作成されます。
ここでさらにいくつかの情報を参照してください。
SparseArrayは、整数のキーと値のペアに対して、HashMapよりもメモリ効率の高いデータ構造です。また、Androidに固有であり、JavaSEには使用できないと思います。
Linterの警告は、上記のようにSparseArrayを使用する必要があることを示している場合があります。このばかげた警告は正しいか間違っているかもしれません。適切であると判断した場合、または@SuppressLintアノテーションで抑制する必要がある場合は、HashMapではなくSparseArrayを使用することを決定する必要があります。
実装するかどうかを決定するには、少し調査して状況を評価する価値があります。ここにいくつかの便利なリンクがあります
https://gunhansancar.com/sparsearray-vs-hashmap/
https://developer.android.com/reference/android/util/SparseIntArray