Google Goava API의 기능을 검토 중이며 '실제 프로그래밍'경험에서 사용하지 않은 데이터 구조, 즉 BiMap을 사용했습니다. 주어진 값에 대해이 키를 빠르게 검색 할 수있는 유일한 이점이 있습니까? BiMap을 사용하여 솔루션을 가장 잘 표현할 수있는 문제가 있습니까?우리가 해결하기 위해 BiMap을 사용하는 문제
2
A
답변
8
언제든지 두 개의 맵을 채우지 않고 역방향 조회를 수행 할 수 있기를 원할 때. 예를 들어 이름으로 전화 번호를 조회하고자하는 전화 번호부에서 번호를 가져 오기 위해 역방향 조회를 수행하고 싶습니다.
5
루이는 BiMap
구현에서 가능한 메모리 절약을 언급했습니다. 두 개의 Map
인스턴스를 래핑하면 얻을 수없는 유일한 방법입니다. 그래도 Map
인스턴스를 포장하면 we can take care of a few edges cases입니다. (당신이 처리하는 모든 자신을, 그런데 왜 귀찮게 수 있을까? :))
- 당신이
put(newKey, existingValue)
를 호출 할 경우, 우리는 오히려 실현하기 전에 하나 개의 맵에 항목을 추가하는 대신, 동기화 두 개의 맵을 유지하기 위해 즉시 오류가 있습니다 다른 매핑이 기존 매핑과 충돌합니다. 기존 값을 덮어 쓰려면forcePut
을 제공하십시오.null
또는 다른 잘못된 값을 삽입하는 것과 유사한 안전 장치를 제공합니다. BiMap
뷰 동기화에 두 개의 맵을 유지 : 원래BiMap
의entrySet
에서 요소를 제거하는 경우, 해당 항목은 역에서 제거됩니다. 우리는Entry.setValue
에서 같은 종류의 일을합니다.- 우리는 직렬화를 처리합니다 :
BiMap
및 그 반대 상태가 "연결됨"이며 항목이 한 번만 직렬화됩니다. - 우리는
inverse()
의 스마트 구현을 제공하므로foo.inverse().inverse()
은 래퍼의 래퍼가 아닌foo
을 반환합니다. Set
을 반환하려면values()
을 다시 지정하십시오. 이 세트는 원래BiMap
과 동일한 반복 순서를 유지한다는 점을 제외하면inverse().keySet()
에서 얻은 것과 동일합니다.
관련 문제
- 1. Java에서 MessageNotReadableException을 해결하기 위해
- 2. Unity가 이름으로 해결하기 위해
- 3. 어떻게 com.facebook.android를 해결하기 위해 *
- 4. 이 문제를 해결하기 위해
- 5. NullPointerException이 어떻게 해결하기 위해?
- 6. 어떻게 org.hibernate.NonUniqueObjectException를 해결하기 위해
- 7. 내가 해결하기 위해 무엇을해야, 창
- 8. Ruby에서 트라이앵글 문제 해결하기
- 9. 어떻게 ORA-02014를 해결하기 위해 :
- 10. NSArray에서 문제 해결하기
- 11. 단위 테스트에서 NSTimeZone 문제 해결하기
- 12. 페이스 북은 해결하기 위해 도메인
- 13. 이 문제를 해결하기 위해 store_accessor에게
- 14. PHP는 preg_match 패턴을 해결하기 위해
- 15. 수 없습니다 DNS 해결하기 위해
- 16. 어떻게하기 matplotlib에서 ImportError를 해결하기 위해
- 17. 내가이 운동을 해결하기 위해 노력하고
- 18. Hackerrank의 표준 입력은 나에게 내가 HackerRank에이 문제 해결하기 위해 노력하고
- 19. android 만든 bimap을 지우는 법
- 20. 이것을 해결하기 위해 어떤 알고리즘을 사용해야합니까?
- 21. 오류 나는이 문제를 해결하기 위해 모르는 7.0RC2
- 22. 실제 상황을 해결하기 위해 알고리즘을 나누고 정복하십시오.
- 23. 우리가 사용하는 이유
- 24. 하지 MyClassLoader 우리가 사용하는
- 25. 메모리 문제를 해결하기 위해 onDestroy를 강제 실행하십시오.
- 26. XOR을 해결하기 위해 신경망을 구현하려고 시도했습니다.
- 27. 뉴턴 - Raphson 방법 입방 방정식을 해결하기 위해
- 28. PHP는 데몬은 우리가 사용하는 PHP 데몬을 실행하기 위해, XAMPP에서
- 29. LINQ - 위해 내가 해결하기 위해 노력하고있어 정확한 문제를 설명하겠습니다 일부
- 30. 우리가 현재 국제화를 사용하는 레일 프로젝트에서 작업하는 국제화 날짜 문제
어떻게이 작업을 두 개의 맵없이 수행 할 수 있습니까? 확실히 BiMap은 두 개의지도를 사용해야하며이 사실을 그냥 숨겨야합니까? –
네, 아마도 두 개의 맵을 사용하지만, 두 개의 맵을 채우고 관리하지 않아도됩니다. – digitaljoel
@ digitaljoel : 아마도 그렇지 않습니다. [출처] (https://code.google.com/r/baggiogamp-guava/source/browse/guava/src/com/google/common/collect/AbstractBiMap.java?r=4fbef9f220a86423f6ebc131c06bac5c3bb5e731) – jlordo