Notice
Recent Posts
Recent Comments
Link
관리 메뉴

설.현.아빠

HashMap, HashTable, LinkedHashMap, ConcurrentHashMap 알아보기 본문

안드로이드/HashMap

HashMap, HashTable, LinkedHashMap, ConcurrentHashMap 알아보기

설.현.아빠 2011. 4. 28. 11:24



음...요새 자주 접하게 되는 Data Storage이다. 보통 <key, value> 형태로 put하고 get(key)를 통해 value를 가져온다.


value에는 Bitmap, Class, Drawable....등등등을 넣을 수 있다.


현재까지 내가 파악한 MAP Interface에는 HashMap, HashTableLinkedHashMap, ConcurrentHashMap 이다.


요요 세가지에 대해서 자세히 살펴보자^^




1. HashMap VS HashTable


    비동기화 VS 동기화  


비동기화가 성능이 좋고, 동기화는 성능이 안좋다.


중요한 것은 HashMap  Multi Thread 환경에서 사용하면 안된다. 여러개의 Thread가 동시에 HashMap 을 건드려서


key, value 를 넣게 되면 문제가 발생 할 수 있다.


    참조 : http://blog.naver.com/borahoon?Redirect=Log&logNo=120122900827





2. HashMap, HashTable VS LinkedHashMap


    Data 추출시 저장된 순서에 상관없이 랜덤 추출 VS Data 추출시 저장된 순서대로 추출


LinkedHashMap의 경우 아래와 같이 세번째 인자값을 true 로 설정 해줌으로써 저장순서 대신 접근순서에 


대한 기록을 유지한다. 참고로 첫번째 인자는 map의 크기, 두번째 인자는 LoadFactor로써 capacity의 몇%가


차게되면 용량을 늘려야 할 것인가를 설정한다.


LinkedHashMap<String, Bitmap>(HARD_CACHE_CAPACITY / 2, 0.75f, true)


접근 순서란 get이나 put의 호출을 말하며 Iteration(참조 : http://www.sjava.net/69) 순서는 오래전에 접근된 것부터


최근에 접근된 순서이다.


    참조 : http://www.javastudy.co.kr/docs/techtips/020913.html





3. ConcurrentHashMap


동기화를 제공하는 MAP Interface


동기화가 필요치 않다면 HashMap을 사용하였고, 동기화를 지원 하는 

HashTable 의 경우는

성능이 느리다.


ConcurrentHashMapHashTable과 기능 및 특징은 동일하지만 성능향상이 

되었다


내부적으로 여러 개의 세그먼트를 두고 각 세그먼트마다 별도의 락을 가지고 있다.



여러 Thread에서 ConcurrentHashMap객체에 동시에 데이터를 삽입, 참조하더라도 


그 데이터가 

다른 세그먼트에 위치하면 서로 락을 얻기 위해 경쟁하지 않는다.





Comments