안드로이드 애플 리케이션 (아마도 수천 가지)에 키/값을 저장하기 위해 해시 맵을 사용해야하지만, 메모리를 절약하기 위해 SparseArray를 사용해야한다는 것을 알고 있습니다. 그러나, 내 열쇠는 문자열이어야합니다. SparseArray 또는 다른 대안의 사용자 지정 구현을 만드는 방법이 있습니까?String 키가있는 Android SparseArray?
답변
SparseArray는 정수가 키 일 때만 문제가됩니다. 키를 바이너리 검색해야하기 때문에 정수 값에서만 가능한 메모리 최적화입니다. 문자열에 대한 이진 검색은 비싸고 잘 정의되어 있지 않으므로 ('1'이 'a'또는 '미친 일본어 문자'보다 작거나 같아야합니까?) 그렇게하지 않습니다.
중간에, SparseArray는 메모리를 저장하지만 시간이 더 걸릴 수 있습니다. HashMap에 대한 get은 O (n/size) 여야합니다. 여기서 size는 hashmap의 버킷 수입니다. SparseArray는 O (log (n))가 될 것입니다. 사용할 메모리 및 속도에 따라 다릅니다. 당신이 정말로 큰 (100K의 항목들)을 가지고 있다면, 캐시 미스의 물리적 인 현실이 메모리 캐시 페이징 문제를 겪을 수도 있습니다. 기술적으로 더 나쁜 경우에도 HashMap은 더 많은 성능을 발휘할 수 있습니다. miss 당 get, binary 검색은 multiple을 가질 수 있습니다. ArrayMap Doc
SparseArray
는 정수 키 유형으로이지도에 대한 전문 클래스입니다. 그들은 기본적으로 그 사실을 사용하여 Integer 객체에 대한 참조 대신 int 값을 저장합니다 (따라서 메모리 절약).
키가 다른 유형일 때 HashMap
표준을 사용하는 것이 본질적으로 잘못되었습니다.
당신은 ArrayMap을 사용할 수 있습니다 문자열 -> mystring.hashCode()의 hashCode
당신은 사용할 수 있습니다 ArrayMap 자세한 내용은 기존의 HashMap
보다 효율적으로 더 많은 메모리로 설계되어 일반 키 -> 값의 매핑 데이터 구조입니다 :
- 1. Android SparseArray <SparseArray <SparseArray > 초기화
- 2. SparseArray getValue 구문 오류 (java/android)
- 3. SparseArray 데이터 검색
- 4. String 키가있는 JSON 데이터 읽기 : Angular2
- 5. SparseArray가 포함 된 Android 번들 <String>
- 6. Android String Resources Reference
- 7. android java string operation
- 8. Android String Array 조작
- 9. android string 비교 문제?
- 10. Android - String Shortening Approach
- 11. API의 Android String 리소스
- 12. Android ListView String Styles
- 13. HttpResponse & string android
- 14. Android -TextView to String
- 15. Android background string resource
- 16. Android String Decrypt Base64
- 17. Android Parcelable String null
- 18. Bytearray to string android
- 19. 해시지도 안드로이드 사용시 경고 표시 (새로운 SparseArray 사용 <String>)
- 20. 키가있는 목록
- 21. android unicode to read string
- 22. Android : NullPointerException, EditText to String
- 23. Very Long String Eclipse Android
- 24. Android Object를 String Array로 변환
- 25. Android - List Array to String
- 26. android getSystemService (String s) - reflection?
- 27. Android String HTML 도움말이 필요합니다.
- 28. Android SharedPreferences 동일한 키가있는 모든 문자열을 가져 옵니까?
- 29. Android ArrayList <HashMap <String, String >>
- 30. 임의의 JSON 키가있는 Jackson ObjectMapper
Hmmm.ok 의미가 있습니다. String을 키 입력해야 할 때 가장 좋은 방법은 무엇입니까? 해시 맵은 속도와 메모리가 가능한 가장 효율적인 방법입니까? – Mike6679
하나의 메모리 또는 속도를 선택하십시오. 당신은 둘 다 최적화하지 않을 것입니다. 속도가 필요하면 해시 맵을 사용하십시오. 메모리가 필요한 경우 배열 기반의 정렬 목록이나 정렬 된 목록 또는 BST (많은 데이터베이스가 사용하는 것으로 log (n) 검색 및 O (n) 메모리와의 나쁜 절충이 아닙니다)가 필요합니다. 하지만 둘 다 최적화 할 수는 없습니다. 그것이 어려움이 될 것이라고 생각되면, 나중에 자체 구현을 변경할 수 있도록 자체 클래스에서 분리하십시오. –
바이너리 검색 트리에 익숙하지만 정수형 키를 사용합니다. String 값을 입력해야하는 경우 어떻게 BST를 사용합니까? – Mike6679