문자열 개체의 간단한 컬렉션을 가지고있을 수 있습니다. 약 10 개의 요소 인 일 수 있습니다.이 컬렉션을 프로덕션 환경에서 사용하여 해당 문자열을 검색합니다 컬렉션 수십억 시간, 검색 작업을 0 (1) 시간 내에 수행 할 수 있도록 최상의 결과를 얻는 데 사용할 수있는 최상의 컬렉션 또는 데이터 구조는 무엇입니까 여기에서 HashMap을 사용할 수 있지만 검색 순서는 일정합니다 시간 아니 0 (1) 내가 검색이 0 (1) 있는지 확인하고 싶습니다. 현재는, 그렇지 않은 경우는 false하지 존재하는 경우0 (1) 연산에서 검색을 허용하는 문자열 개체를 사용한 단순한 컬렉션
답변
일정 시간 이 O 경우
우리의 데이터 구조는 true를 반환해야한다 (1). HashMap
이 좋습니다. (당신이 Set
또는 Map
필요 여부에 따라 또는 HashSet
.)
당신의 세트가 불변 인 경우, 구아바의 ImmutableSet
이 2 ~ 3 배의 메모리 풋 프린트를 감소시킬 것이다 (그리고 아마도 당신에게 향상된 속도의 작은 상수 요소를 제공).
그래도 HashSet HashMap을 사용할 수는 있지만 타사 라이브러리를 사용해야하는지 여부는 진행 중입니다. Google Guava 및 Trove처럼. 신원 해시 맵 도움말을 사용합니까? 타사 api를 사용하는 것이 가치가없는 한 어려운 호출입니다. Gauva와 Trove API가 산업에서 얼마나 많이 사용되는지 – codeninja
'IdentityHashMap'은 당신을 돕기보다는 당신을 거의 해칠 것입니다. 구아바는 꽤 광범위하게 사용됩니다; 특히 기본적으로 프로덕션 환경의 모든 Java 기반 Google 서비스에 사용됩니다. –
HashSet<String>
구조체를 사용하십시오. 연산의 복잡성은 O (1)입니다.
HashSet
아니야. 개체의 해시 코드가 올바르게 배포 된 경우에만 따라서 실제 데이터와 hashCode()의 구현에 따라 O (n)과 O (1) 사이에 더 많은 것이 있습니다. 그러나 전에 말했듯이 해시 (Map | Set)가 최선의 방법 일 수 있습니다. –
그래, 우리는 0 (1) 0 (c) 시간 대부분을 보장 할 수 없다는 것을 이해합니다. 하지만 그 어떤 0 (1)에서 제공하는 모든 사용자 지정 데이터 구조를 디자인 할 수 있습니다. 불변의 컬렉션을 사용하는 것과 같은 Google 도움말에서 설정된 구아바 컬렉션은 무엇입니까? 적어도 메모리 사용량을 줄이는 데 도움이됩니까? 우리가 달성 할 수있는 메시지 당 게임 업계에서 사용하기 때문에 큰 성능 향상이 될 것입니다. – codeninja
이전에 제안한대로 HashSet/HashMap을 사용할 수 없다면 Radix Tree 구현을 작성할 수 있습니다.
그래도 HashSet HashMap을 사용할 수 있지만 제 3 자 라이브러리를 사용해야하는지 여부는 진행 중입니다. Google Guava 및 Trove처럼. 신원 해시 맵 도움말을 사용합니까? 타사 api를 사용하는 것이 가치가없는 한 어려운 호출입니다. 이 Gauva 및 Trove API가 업계에서 얼마나 많이 사용되는지 – codeninja
- 1. FIFO 검색을 사용한 컬렉션
- 2. 문자열 연산에서 이중 자유 오류
- 3. 빠른 검색을 허용하는 .NET 클래스
- 4. OJB 참조 설명자 1 : 0 관계? 자동 검색을 false로 설정해야합니까?
- 5. 도시 비행선을 사용한 단순한 IAP
- 6. 정리 된 검색을 사용한 재귀 백 트랙
- 7. 단순한 haskell 문자열 관리
- 8. [0, 1]
- 9. Twisted를 사용한 단순한 비 네트워크 동시성
- 10. 개체를 배열에 컬렉션
- 11. 일반 목록에서 컬렉션 개체를 제거하십시오.
- 12. 개체를 사용한 재귀가 가능합니까?
- 13. 자동 검색을 허용하는 웹 검색 API
- 14. NHibernate StatelessSession을 사용한 계단식 컬렉션
- 15. linq을 사용한 동적 컬렉션 생성
- 16. 같은 패턴 '[0-9] [0-9] [0-1] [0-9]'
- 17. 엔터티 프레임 워크 0..1 - 0..1 연결
- 18. 재귀를 사용한 문자열 반전
- 19. 0 1 행렬 밸런싱
- 20. 정의 0 상수와 1
- 21. 왜 0 + 1 == 49입니까?
- 22. Java의 빠른 문자열 컬렉션
- 23. 구문 분석 문자열 {0}
- 24. 하위 문자열 [0]
- 25. (0) 문자열 "0"으로 승격해야 FALSE
- 26. 문자열 (0 : 2 : 1)을 PHP의 시간 형식으로 변환
- 27. 알파벳을 통해 문자열 01A 1의 짝수 {0, 1, A}
- 28. 간단한 문자열 검색을 구현하는 방법
- 29. Google App Engine 검색을 사용한 TransientError
- 30. 여러 "1 - 0..1"관계 모델
일정 시간 검색? 예, 'HashMap'이 아마도 최선의 방법 일 것입니다. –
별도의 질문을하십시오 _separately._ –
다른 해결책을 제시해야합니다. 아마도 HashSet 또는 유사한 것이 좋은 선택 일 수 있지만 작은 컬렉션이있을 때 간단한 배열 검색의 속도를 과소 평가하지 마십시오. 해시 코드를 생성하고 해시 코드를 찾고 올바른 버킷을 찾는 데 소요되는 오버 헤드는 또한 시간이 걸립니다. 상수가 아닌 경우에도 단지 10 개의 요소만으로 구성된 for 루프를 사용하면 더 나은 선택이 될 수 있습니다. – Optimist