Development Tip

Android에서 해시 맵을 사용할 때 경고가 표시됩니다 (새 SparseArray 사용

yourdevel 2020. 11. 16. 22:19
반응형

Android에서 해시 맵을 사용할 때 경고가 표시됩니다 (새 SparseArray 사용)


나는 안드로이드 개발이 처음입니다. 내 Android 앱에서을 사용 HashMap하고 있지만 경고가 표시됩니다.

**"Use new SparseArray<String>(...) instead for better performance"**

이것은 무엇을 의미하며 SparseArray<String>대신 어떻게 사용할 수 있습니까?


SparseArray<String>(...)더 나은 성능을 위해 대신 새 사용

여기에 설명 된 이유 때문에이 경고가 표시 됩니다 .

SparseArray는 정수를 객체에 매핑합니다. 일반적인 Object 배열과 달리 인덱스에 간격이있을 수 있습니다. HashMap을 사용하여 정수를 객체에 매핑하는 것보다 더 효율적입니다.

지금

SparseArray를 어떻게 사용합니까?

아래 방법으로 할 수 있습니다.

  1. 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);
    
  2. 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);
    

도움이되기를 바랍니다.


SparseArrayInteger키로 사용할 때 사용됩니다 .

를 사용하는 경우 SparseArray키는 A와있을 것 원시 변수 는 사용할 때와는 달리 HashMap항상이 요구되는 경우 ObjectA와 키를 원인이됩니다 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

참고 URL : https://stackoverflow.com/questions/14787785/warning-shows-when-i-use-hash-map-in-androiduse-new-sparsearraystring

반응형