HashMap의 키값으로 Integer를 사용하면, 

Android스튜디오가 퍼포먼스 향상을 위해서 SparseArray를 사용하라고 하는 것을 본적이 있으신가요?

저도 종종 보게되는데요. 오늘은 이 SparseArray에 대해서 간단히 정리해보도록 하겠습니다.



1. SparseArray


SparseArray는 integer값을 Objects에 매핑을 해주는 것인데요.

특이한 점은, 각 인덱스 사이에 공간을 만들수 있다는 것입니다.

(예를 들면, 1~10번에 아이템들이 있고, 그다음에 11~20번은 비우고, 30~40번에 아이템들을 넣을 수 있다는 것이죠.)


성능향상을 위해서 SparseArray는 데이터가 지워지면, deleted로 표시하고 그 공간을 비워놓습니다.

(물론, 지워진 데이터의 키값을 주고 데이터를 추가한다면 그 자리는 다시 채워지게 됩니다.)

이러한 방식이 비워진 데이터를 다시 정렬하는 과정에서의 충돌이 생기는 HashMap방식보다,

메모리를 효율적으로 사용해서 성능이 더욱 좋다고 합니다.


대신, 이러한 방식은 수천데이터 정도의 많은 item들을 넣고 관리하기에는 부적합하다고 하는군요.



2. SparseArray 사용


이제 간단하게 SparseArray에 데이터를 넣어보고, for문을 키값순서대로 출력해 보겠습니다.


SparseArray객체를 만들어서, 자료를 추가하는 메소드에는 append()와 put()메소드가 있는데요.

Append()는 기존 키의 int값보다도, 추가할 데이터의 키값이 더 큰 경우에는 put을 사용하는 것이 효과적이구요.

Put()은 HashMap과 같이 특정한 키밸류 값을 추가하도록(기존의 값이 있다면 replace 되도록) 되어있구요.


아래와 같이 간단하게, 데이터를 작성해보고, for문을 돌려보았습니다.




그럼 실행한 결과 화면을 보도록 하겠습니다.

for문에서 실행시켰던 것과 같이, 키 순서대로 잘 나옵니다.




+ Recent posts