Я искал реализацию двунаправленной карты в Java и наткнулся на эти две библиотеки:
- Google Guava (ранее "Коллекции Google")
- Коллекции Apache Commons
Оба бесплатны, имеют реализацию двунаправленной карты, которую я искал (BidiMap в Apache, BiMap в Google), удивительно почти одинакового размера (Apache 493 кБ, Google 499 кБ) [ред .: больше не соответствует действительности!] И кажутся во всех отношениях довольно похож на меня.
Какой из них выбрать и почему? Существуют ли другие эквивалентные альтернативы (должны быть бесплатными и иметь хотя бы двунаправленную карту)? Я работаю с последней версией Java SE, поэтому нет необходимости искусственно ограничивать Java 5 или что-то подобное.
java
collections
apache-commons
guava
Joonas Pulakka
источник
источник
Ответы:
На мой взгляд, лучший выбор - это гуава (ранее известная как коллекция Google):
CacheBuilder
и его предшественникMapMaker
просто потрясающийApache Commons Collections также является хорошей библиотекой, но она уже давно не может предоставить универсальную версию (которая, по моему мнению, является основным недостатком API для коллекций) и, как правило, находится в состоянии обслуживания / нереализации -too-much-work-on-it mode Недавно Commons Collections снова набрала обороты, но ей нужно наверстать упущенное. ,
Если размер загружаемого файла / объем памяти / размер кода является проблемой, то Apache Commons Collections может быть лучшим кандидатом, так как это общая зависимость других библиотек. Поэтому использование его в вашем собственном коде также может быть сделано без добавления каких-либо дополнительных зависимостей. Изменить: это конкретное «преимущество» к настоящему времени частично подорвано, так как многие новые библиотеки фактически зависят от Guava, а не от коллекций Apache Commons.
источник
Из часто задаваемых вопросов : Часто задаваемые вопросы о коллекциях Google
источник
Самые важные вещи, которые я нашел, которые делают Коллекции Google местом для начала:
Вот отличное видео на Youtube о выступлении, которое дал основной автор, и он хорошо обсуждает, что стоит знать об этой библиотеке.
источник
Две другие вещи (надеюсь, я не ошибаюсь)
источник
git clone https://code.google.com/p/guava-libraries/
иgit checkout v11.0.2
?Одна неприятная вещь в Guava - Multimap не расширяет java.util.Map. Если у вас есть свои собственные методы, которые работают с картами, они не будут работать с мультикартами Guava (интерфейс Apache MultiMap действительно расширяет java.util.Map). Я уверен, что есть какая-то веская причина, почему это так, но это также неудобно.
источник
Multimap
какMap
, всегда естьasMap()
представление.Map
с пониманием того, что каждая ссылка на него наV
самом деле будетCollection<V>
, я думаю, вы довольно быстро поймете, почему это не хороший суперинтерфейсMultimap<K, V>
.