문제

나는 찾고 있었다 양방향지도 Java에서 구현 하고이 두 라이브러리를 우연히 발견했습니다.

둘 다 무료이며, 내가 찾고 있던 양방향 맵 구현 (Apache의 Bidimap, Google의 Bimap), 거의 같은 크기 (Apache 493 KB, Google 499 KB) [ed. : 더 이상 True!] 모든면에서 나와 꽤 비슷합니다.

어떤 것을 선택해야하고 그 이유는 무엇입니까? 다른 동등한 대안이 있습니까 (자유롭고 최소한 양방향 맵이 있어야 함)? 나는 최신 Java SE와 함께 일하고 있으므로 Java 5 또는 그와 비슷한 것을 인위적으로 제한 할 필요가 없습니다.

도움이 되었습니까?

해결책

제 생각에는 더 나은 선택은입니다 구아바 (이전에 Google 컬렉션으로 알려진) :

  • 더 현대적입니다 (제네릭이 있습니다)
  • 컬렉션 API 요구 사항을 절대적으로 따릅니다
  • 적극적으로 유지됩니다
  • CacheBuilder 그리고 그것은 전임자입니다 MapMaker 그냥 평범합니다

Apache Commons Collections도 좋은 라이브러리이지만 제네릭 지원 버전 ( 주요한 내 의견으로는 컬렉션 API에 대한 단점) 및 일반적으로 유지 보수에있는 것 같습니다. 최근 Commons 컬렉션은 약간의 증기를 집어 들었지만 약간의 할 일이 있습니다..

다운로드 크기/메모리 풋 프린트/코드 크기가 문제 인 경우 Apache Commons 컬렉션은 다른 라이브러리의 일반적인 종속성이기 때문에 더 나은 후보가 될 수 있습니다. 따라서 추가 종속성을 추가하지 않고도 자신의 코드로 사용하면 잠재적으로 수행 할 수 있습니다. 편집 : 많은 새로운 라이브러리가 실제로 Guava와 ~ 아니다 Apache Commons 컬렉션에서.

다른 팁

내가 찾은 가장 중요한 것은 Google 컬렉션을 시작할 장소로 만들었습니다.

  • 제네릭 (제네릭이없는 컬렉션 -FTL)
  • 컬렉션 프레임 워크와의 일관성 (Josh Bloch는이 프레임 워크의 핵심 플레이어였습니다)
  • 단정. 이 사람들은이 문제를 제대로 얻는 데 필사적으로 묶여 있습니다. 그들은 25K 단위 테스트와 같은 것을 가지고 있으며 API를 바로 얻는 것과 관련이 있습니다.

여기 위대한 것입니다 YouTube 비디오 1 차 저자가 주신 대화에서 그는이 도서관에 대해 알아야 할 가치가 무엇인지에 대해 잘 설명합니다.

FAQ에서 :Google Collections FAQ

Google이 Apache Commons 컬렉션을 대신 개선하려고 할 수 있었을 때이 모든 것을 구축 한 이유는 무엇입니까?

Apache Commons 컬렉션은 우리의 요구를 분명히 충족시키지 못했습니다. 그것은 제네릭을 사용하지 않으며, 우리는 코드에서 편집 경고를 받기를 싫어하기 때문에 우리에게 문제가됩니다. 그것은 또한 오랫동안 "보유 패턴"에있었습니다. 우리는 우리가 그것을 사용하기 위해 기뻐할 때까지 그것을 고치기 위해서는 우리의 꽤 큰 투자가 필요하다는 것을 알 수 있었고, 그 동안 우리 자신의 도서관은 이미 유기적으로 성장하고있었습니다.

Apache Library와 우리의 중요한 차이점은 우리의 컬렉션이 그들이 구현 한 JDK 인터페이스에 의해 지정된 계약을 매우 충실히 준수한다는 것입니다. Apache 문서를 검토하면 위반의 수많은 예를 찾을 수 있습니다. 그들은 이것을 명확하게 지적하는 것에 대한 신용을받을 자격이 있지만, 표준 수집 행동에서 벗어나는 것은 위험합니다! 그러한 컬렉션으로 무엇을하는지 조심해야합니다. 버그는 항상 일어나기를 기다리고 있습니다.

당사의 컬렉션은 완전히 생성되어 계약을 위반하지 않습니다 (JDK 구현이 허용 가능한 위반에 대한 강력한 선례를 설정 한 경우는 격리 된 예외와 함께). 즉, 컬렉션 중 하나를 컬렉션을 기대하고 상황이 정확히 작동한다고 확신하는 모든 방법으로 전달할 수 있습니다.

다른 두 가지 (내가 틀리지 않기를 바랍니다)

  • Guava의 라이센스 (Google 컬렉션의 새로운 이름)는 Apache License 2.0입니다. 의미 : Apache Commons 프로젝트와 동일합니다.
  • 다운로드 할 파일에서 Guava의 소스 코드를 찾을 수 없습니다 (Git-Access 만 가능해 보입니다).

Guava의 불쾌한 점은 멀티 맵이 java.util.map을 확장하지 않는다는 것입니다. 지도에서 작동하는 자신만의 방법이있는 경우 Guava Multimaps에서 작동하지 않습니다 (Apache Multimap 인터페이스는 java.util.map을 확장합니다). 나는 그것이 그 방식이라는 이유가 몇 가지 있다고 확신하지만 불편하다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top