Android에서 해시 맵을 사용할 때 경고가 표시됩니다 (새 SparseArray 사용)
나는 안드로이드 개발이 처음입니다. 내 Android 앱에서을 사용 HashMap
하고 있지만 경고가 표시됩니다.
**"Use new SparseArray<String>(...) instead for better performance"**
이것은 무엇을 의미하며 SparseArray<String>
대신 어떻게 사용할 수 있습니까?
SparseArray<String>(...)
더 나은 성능을 위해 대신 새 사용
SparseArray는 정수를 객체에 매핑합니다. 일반적인 Object 배열과 달리 인덱스에 간격이있을 수 있습니다. 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와있을 것 원시 변수 는 사용할 때와는 달리 HashMap
항상이 요구되는 경우 Object
A와 키를 원인이됩니다 INT가되기 위해 Integer
객체를 에서 개체를 가져 오는 동안 짧은 시간 동안 지도.
를 사용하면 가비지 콜렉터SparseArray
를 저장할 수 있습니다.
따라서 Map<Integer,String>
.
코드에 더 나은 데이터 구조가 있다는 힌트입니다.
그 힌트는 Lint가 제공합니다. 일반적으로 HashMap
다른 것에 정수 가있을 때 그것을 얻습니다 .
가장 큰 장점은 정수 키를 기본으로 취급하는 것입니다. 즉, Integer
키로 사용하는 것은 (Java 객체)에 은폐되지 않습니다 .
이것은 큰지도를 사용할 때 큰 문제입니다. HashMap
이 경우 많은 Integer
객체가 생성 됩니다.
SparseArray는 정수 키 값 쌍의 경우 HashMap보다 메모리 효율적인 데이터 구조입니다. 그리고 그것은 Android에만 해당되며 Java SE에는 사용할 수 없다고 생각합니다.
때때로 Linter 경고는 SparseArray를 위와 같이 사용해야 함을 나타냅니다. 이 멍청한 경고는 옳거나 그른 것일 수 있습니다. 적합하다고 생각되거나 @SuppressLint 주석으로 억제해야하는 경우 HashMap 대신 SparseArray를 사용하기로 결정해야합니다.
구현 여부를 결정하려면 약간의 조사를 수행하고 상황을 평가하는 것이 좋습니다. 여기에서 유용한 링크를 모두 찾을 수 있습니다.
https://gunhansancar.com/sparsearray-vs-hashmap/
https://developer.android.com/reference/android/util/SparseIntArray
'Development Tip' 카테고리의 다른 글
"for = id"를 사용하지 않고 레이블을 확인란과 연결할 수 있습니까? (0) | 2020.11.16 |
---|---|
이미지 src 속성에 데이터 바인딩을 사용하는 녹아웃 템플릿이 작동하지 않음 (0) | 2020.11.16 |
Laravel Fluent Query Builder 하위 쿼리와 조인 (0) | 2020.11.16 |
두 어레이를 동시에 반복 (0) | 2020.11.16 |
Docker 저장소에 Ubuntu에서 apt-get 업데이트 실행시 릴리스 파일이 없음 (0) | 2020.11.16 |