我是在寻找一个 双向的地图 执行Java、和偶然发现了这两个图书馆:

两者都是免费的,有的双向的线图的执行,我一直在寻找(BidiMap在Apache,BiMap在谷歌),都是令人惊讶的是,几乎同大小(Apache493kB,谷歌499kB)[ed.:不再真实的!] 而且似乎在所有的方法非常类似于我。

哪一个我应该选择,和为什么?还有一些其他相当的替代办法(必须是免费的,并至少具有双向的地图)?我工作的最新Java本身,因此不需要人为地限制Java5或类似的东西。

有帮助吗?

解决方案

在我看来更好的选择 番石榴 (以前称为谷歌集):

  • 这是更多的现代化(具有仿制药)
  • 它绝对遵循集API要求
  • 它积极维护
  • CacheBuilder 和它的前身 MapMaker 都只是普通的真棒

Apache识共享收藏的是一个很好的图书馆,但是它长期以来未能提供仿制药启用的版本(这是一个 主要的 缺点的一集API在我看来)和一般似乎是在一个维护/不要-不要太多的工作对它模式 最近,共收集了一些蒸汽再次,但它有一些赶上来做。.

如果下载量/存储器占/代码尺寸是一个问题然后Apache识共享收集可能是一个更好的候选人,因为它是一个共同的依赖性的其他图书馆。因此,使用它在你自己的代码,以及有可能这样做没有增加任何其他依赖关系。编辑:这个特别的"优势"已经部分地破坏了通过现在,由于许多新的图书馆实际上取决于番石榴 在阿帕奇共同的集合。

其他提示

最重要的东西我已经找到,使谷歌集的地方开始:

  • 泛型(收藏没有仿制药--达利)
  • 一致性的集合框架(乔希*布洛赫是一个关键成员在这一框架)
  • 正确性。这些家伙都是迫切绑得到这个问题的权利;他们喜欢的东西25K单元的测试,并且是绑得到API只是正确的。

这里是一个伟大的 Youtube上的视频 一谈就是给出主要作者和他做好工作的讨论什么是值得了解的关于这个图书馆。

从常见问题:谷歌集的常见问题

为什么没有谷歌建立所有这些,当时它可能试图改善阿帕奇公共收藏,而不是?

Apache识共享收藏的很清楚不满足我们的需要。它的 没用仿制药,这是我们的一个问题,因为我们不想得到 汇编的警告我们的代码。它也已经在一个"保持 模式"很长一段时间。我们可以看到,这将需要一个漂亮 主要的投资从我们来解决它,直到我们都乐于使用它, 与此同时,我们自己的图书馆已越来越有机。

一个重要的差异之间的Apache图书馆和我们是 我们的产品系列,非常忠实地遵守合同规定的通过 the JAVA接口,他们实现。如果你审查Apache 文件中,你会发现无数的例子的侵犯。他们 值得赞扬,指出这些所以很明显,但是仍然偏离 从标准收集的行为是有风险的!你必须小心什么 你做的这样的集合;错误总是只是在等待的发生。

我们的集合是充分generified和永远不会违反他们的合同 (与孤立的例外情况,在那里JAVA的实现设置一个强大 先例可接受的侵犯行为).这意味着你可以通过一个 我们收集到的任何方法,预计的收集和感觉 非常有信心,事情会的工作,正是因为他们应该。

两个其他的事情(我希望我没有错的)

  • 许可证的番石榴(新名称谷歌集)是Apache许可证2.0,这意味着:同一个作为Apache识共享项目
  • 我无法找到源代码的番石榴在要下载的文件(这似乎仅是一个混帐的访问是可能的)

一个讨厌的事情有关番石榴是基于不延伸java。工具.地图。如果你有自己的方法工作上的地图,他们不会的工作在石榴在图(Apache基于接口并延长java。工具.地图)。我敢肯定这有一些很好的理由为什么这是它的方式,但它也不方便。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top