2010-06-18 4 views
10

면책 조항 :
이 질문은 논쟁의 여지가 없었습니다!Java에서 키 - 값 쌍을 검색하는 가장 빠르고 효율적인 방법은 무엇입니까?

키 - 값 쌍을 검색하는 속도가 가장 빠르고 메모리 낭비가 적은 방법은 무엇입니까? 관계와 같은 키 - 값으로 항목을 저장하므로 빠르게 액세스해야합니다. SQLite 데이터베이스를 사용해야합니까? 지도? 해시 테이블? HashMap? 검색 방법에 관계없이 장점/단점을 알려주십시오.

답변

11

해시 기반 Map 구조는 키에 대한 hash function이 효율적이면 오래 갈 수있는 방법입니다. 조회 중에 값 id : s를 사용하여 검색 중에 메모리를 절약 할 수 있습니다.

데이터가 이미 데이터베이스에 있다면이 검색을 모두 완료 한 후에이 검색을 RDBMS에 남겨 둘 수 있습니다.

7

데이터가 메모리에있는 경우 일반적으로 Map은 친구입니다.

그러나 Hashtable을 사용하지 마십시오. 새로운 Map 구현보다 훨씬 느립니다. 그 방법이 동기화되어 대부분의 시간이 필요하지 않기 때문에 (그리고 필요할 때 훨씬 더 나은 대안이 있습니다 - 아래 참조).

단일 스레드 컨텍스트에서 HashMap은 아마 괜찮을 것입니다.

스레드 안전이 필요한 경우 ConcurrentHashMap을 사용하십시오.

+0

잠금이없는 동안 HashTable은 단일 스레드 환경에서 ConcurrentHashMap보다 동기화되고 빠릅니다! 지도에 대한 액세스가 다중 스레드 인 경우 ConcurrentHashMap이 최상의 솔루션입니다. –

+0

@Tobias, "새 컬렉션 구현과는 달리, Hashtable이 동기화되었습니다."- http://java.sun.com/j2se/1.5.0/docs/api/java/util/Hashtable.html –

+1

about semantics ... ""ConcurrentHashMap' 구현은 거의 모든 상황에서'HashMap'보다 더 나은 성능을 제공하며 동시에 동시 읽기 및 쓰기가 가능하며 스레드 안전성이없는 일반적인 복합 연산을 지원하는 메소드가 있습니다. 전개 환경은'ConcurrentHashMap'으로 시작하십시오. " * Clean Code - 민첩한 소프트웨어 장인 정신, Robert C. Martin, p.183 * – Esko

관련 문제