SparseArray 사용
4807 단어 Android 시스템 개발
SparseArray 는 android. util 패키지 에서 int 와 대상 을 매 핑 하 는 데이터 구조 로 내부 에서 배열 을 사용 하여 이 루어 집 니 다. 각각 key 와 value 를 두 배열 에 저장 합 니 다. 자동 포장 작업 을 피 할 수 있 고 데이터 구 조 는 모든 매 핑 대상 에 의존 하지 않 기 때문에 HashMap 보다 더욱 효율 적 입 니 다.특징:
4. 567917. 1. 이분법 으로 데 이 터 를 찾 습 니 다
빅 데 이 터 를 저장 하기에 적합 하지 않다
4. 567917. 3. HashMap 보다 실행 효율 이 느 리 고 이분법 을 통 해 배열 에 삽입 하고 삭제 해 야 할 항목 을 찾 습 니 다.성능 을 향상 시 키 기 위해 SparseArray 는 삭제 할 때 항목 을 실제 삭제 하지 않 고 삭제 해 야 할 대상 을 표시 하 는 최 적 화 를 했다
API:
구조 방법:
SparseArray (): 기본 용량 10. SparseArray (int initialCapacity): 지정 용량 은 initialCapacity 입 니 다.
수치 추출 방법:
E get (int key): 키 에 해당 하 는 값 을 가 져 옵 니 다.public E get (int key, E valueIfKeyNotFound): 키 에 대응 하 는 값 을 가 져 오고, 없 으 면 주어진 valueIfKeyNotFound 를 되 돌려 줍 니 다.E valueAt (int index): 지정 한 인덱스 의 value 값 가 져 오기
키 취 하 는 방법:
int keyat (int index): 지정 한 색인 의 key 값 을 되 돌려 줍 니 다.
색인 가 져 오 는 방법:
int index OfKey (int key): 지정 한 key 의 색인 값 가 져 오기 int index OfValue (E value): 지정 한 value 의 색인 값 을 가 져 오고 value 를 사용 합 니 다.
삭제 방법:
void delete (int key): 지정 한 key 의 값 을 삭제 하고 key 가 존재 하지 않 으 면 동작 하지 않 습 니 다.void remove (int key): 내부 에서 delete () 를 호출 합 니 다. void removeAt (int index): 지정 한 색인 위치의 값 을 삭제 합 니 다.void removeAtRange(int index, int size)。index - index + size 구간 의 값 을 삭제 합 니 다.E removeReturnOld (int key): 지정 한 key 의 값 을 삭제 하고 되 돌려 줍 니 다.void clear (): SparseArray 를 비 웁 니 다.
맵 추가 방법:
void put (int key, E value): 지정 한 key 와 value 를 추가 합 니 다. key 가 존재 하면 이 key 의 value 를 이번 들 어 오 는 value 로 대체 합 니 다.void append (int key, E value): 지정 한 key 와 value 를 추가 하고 배열 의 모든 기 존 키 보다 키 가 큰 경우 에 최적화 합 니 다.
값 수정 방법:
void setValueAt (int index, E value): 지정 한 색인 위치의 value 를 교체 합 니 다.
기타 방법:
int size (): SparseArray 에 저 장 된 개 수 를 가 져 옵 니 다.SparseArray clone (): SparseArray 를 복제 하여 Cloneable 인 터 페 이 스 를 실현 합 니 다.String toString (): {key = obj} 형식 으로 문자열 을 되 돌려 줍 니 다.
내부 구현:
SparesArray 내 부 는 두 개의 데 이 터 를 사용 하여 각각 key 와 value 를 저장 합 니 다. 다음 과 같 습 니 다.
public class SparseArray<E> implements Cloneable {
private static final Object DELETED = new Object();
private boolean mGarbage = false;
private int[] mKeys;
private Object[] mValues;
private int mSize;
맵 쌍 을 삭제 할 때 해당 값 을 삭제 하 는 것 이 아니 라 key 를 유지 하고 value 에 표 시 를 추가 합 니 다: DELETED, 이 key 를 다시 사용 할 수 있 습 니 다. 마지막 으로 쓰레기 회수 절차 에서 삭 제 됩 니 다. 예 를 들 어:
public void delete(int key) {
int i = ContainerHelpers.binarySearch(mKeys, mSize, key);
if (i >= 0) {
if (mValues[i] != DELETED) {
mValues[i] = DELETED;
mGarbage = true;
}
}
}
쓰레기 수 거 방법 은 다음 과 같다.
private void gc() {
// Log.e("SparseArray", "gc start with " + mSize);
int n = mSize;
int o = 0;
int[] keys = mKeys;
Object[] values = mValues;
for (int i = 0; i < n; i++) {
Object val = values[i];
if (val != DELETED) {
if (i != o) {
keys[o] = keys[i];
values[o] = val;
values[i] = null;
}
o++;
}
}
mGarbage = false;
mSize = o;
// Log.e("SparseArray", "gc end with " + mSize);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SparseArray 사용E get (int key): 키 에 해당 하 는 값 을 가 져 옵 니 다.public E get (int key, E valueIfKeyNotFound): 키 에 대응 하 는 값 을 가 져 오고, 없 으 면 주어진...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.