2012-02-12 2 views
0

문자열 개체의 간단한 컬렉션을 가지고있을 수 있습니다. 약 10 개의 요소 인 일 수 있습니다.이 컬렉션을 프로덕션 환경에서 사용하여 해당 문자열을 검색합니다 컬렉션 수십억 시간, 검색 작업을 0 (1) 시간 내에 수행 할 수 있도록 최상의 결과를 얻는 데 사용할 수있는 최상의 컬렉션 또는 데이터 구조는 무엇입니까 여기에서 HashMap을 사용할 수 있지만 검색 순서는 일정합니다 시간 아니 0 (1) 내가 검색이 0 (1) 있는지 확인하고 싶습니다. 현재는, 그렇지 않은 경우는 false하지 존재하는 경우0 (1) 연산에서 검색을 허용하는 문자열 개체를 사용한 단순한 컬렉션

+0

일정 시간 검색? 예, 'HashMap'이 아마도 최선의 방법 일 것입니다. –

+2

별도의 질문을하십시오 _separately._ –

+0

다른 해결책을 제시해야합니다. 아마도 HashSet 또는 유사한 것이 좋은 선택 일 수 있지만 작은 컬렉션이있을 때 간단한 배열 검색의 속도를 과소 평가하지 마십시오. 해시 코드를 생성하고 해시 코드를 찾고 올바른 버킷을 찾는 데 소요되는 오버 헤드는 또한 시간이 걸립니다. 상수가 아닌 경우에도 단지 10 개의 요소만으로 구성된 for 루프를 사용하면 더 나은 선택이 될 수 있습니다. – Optimist

답변

1

일정 시간 O 경우

우리의 데이터 구조는 true를 반환해야한다 (1). HashMap이 좋습니다. (당신이 Set 또는 Map 필요 여부에 따라 또는 HashSet.)

당신의 세트가 불변 인 경우, 구아바의 ImmutableSet이 2 ~ 3 배의 메모리 풋 프린트를 감소시킬 것이다 (그리고 아마도 당신에게 향상된 속도의 작은 상수 요소를 제공).

+0

그래도 HashSet HashMap을 사용할 수는 있지만 타사 라이브러리를 사용해야하는지 여부는 진행 중입니다. Google Guava 및 Trove처럼. 신원 해시 맵 도움말을 사용합니까? 타사 api를 사용하는 것이 가치가없는 한 어려운 호출입니다. Gauva와 Trove API가 산업에서 얼마나 많이 사용되는지 – codeninja

+0

'IdentityHashMap'은 당신을 돕기보다는 당신을 거의 해칠 것입니다. 구아바는 꽤 광범위하게 사용됩니다; 특히 기본적으로 프로덕션 환경의 모든 Java 기반 Google 서비스에 사용됩니다. –

5

HashSet<String> 구조체를 사용하십시오. 연산의 복잡성은 O (1)입니다.

+0

HashSet 괜찮 으면 검색 복잡도가 0 (1)인지 확인합니다. 우리는 그것을 사용할 것이다 – codeninja

+0

아니야. 개체의 해시 코드가 올바르게 배포 된 경우에만 따라서 실제 데이터와 hashCode()의 구현에 따라 O (n)과 O (1) 사이에 더 많은 것이 있습니다. 그러나 전에 말했듯이 해시 (Map | Set)가 최선의 방법 일 수 있습니다. –

+0

그래, 우리는 0 (1) 0 (c) 시간 대부분을 보장 할 수 없다는 것을 이해합니다. 하지만 그 어떤 0 (1)에서 제공하는 모든 사용자 지정 데이터 구조를 디자인 할 수 있습니다. 불변의 컬렉션을 사용하는 것과 같은 Google 도움말에서 설정된 구아바 컬렉션은 무엇입니까? 적어도 메모리 사용량을 줄이는 데 도움이됩니까? 우리가 달성 할 수있는 메시지 당 게임 업계에서 사용하기 때문에 큰 성능 향상이 될 것입니다. – codeninja

0

이전에 제안한대로 HashSet/HashMap을 사용할 수 없다면 Radix Tree 구현을 작성할 수 있습니다.

+0

그래도 HashSet HashMap을 사용할 수 있지만 제 3 자 라이브러리를 사용해야하는지 여부는 진행 중입니다. Google Guava 및 Trove처럼. 신원 해시 맵 도움말을 사용합니까? 타사 api를 사용하는 것이 가치가없는 한 어려운 호출입니다. 이 Gauva 및 Trove API가 업계에서 얼마나 많이 사용되는지 – codeninja