Java或guava映射实现与多个指向单个值的键一起使用

时间:2014-05-22 12:53:16

标签: java guava apache-commons

我遇到许多键指向单个值的情况。这种情况来自我正在实施的服务定位器模式 -

  • 界面中的每个方法都表示为签名字符串
  • 单个界面的所有此类签名都用作键
  • 该值是实现类的完整规范名称

因此,我需要在用户请求任何匹配键时检索单个值。

从某种意义上说,我需要与Guava相反的MultiMap。

我正在寻找最优化的解决方案,因为我的密钥非常相似,虽然对于特定值是唯一的,但我不确定使用像HashMap这样的通用Map实现是否足以处理这种情况。

e.g。以下所有签名

==============

_org.appops.server.core.service.mocks.MockTestService_testOperationThree _org.appops.server.core.service.mocks.MockTestService_getService _org.appops.server.core.service.mocks.MockTestService_start _org.appops.server.core.service.mocks.MockTestService_testOperationTwo_String_int _org.appops.server.core.service.mocks.MockTestService_getName _org.appops.server.core.service.mocks.MockTestService_shutdown _org.appops.server.core.service.mocks.MockTestService_testOperationOne_String

=======

指向单个类,即org.appops.server.core.service.mocks.MockTestServiceImpl,我期待数百个这样的类(值)和数千个这样的类似签名(键)。

如果没有优化的方法,我总是可以使用HashMap为每组键复制值,我想避免。

理想情况下,我想使用Guava的ready实用程序。

1 个答案:

答案 0 :(得分:6)

HashMap实际上就是你需要的,问题在于你误解了它的作用。

  

如果没有优化的方法,我总是可以使用HashMap为每组键复制值,我希望避免使用。

HashMap不会将每个键映射的值的副本存储到该值。 HashMap引用存储到Java对象。它的成本始终相同。一个HashMap<Integer, BigExpensiveObject>,其中每个键映射到相同的BigExpensiveObjectHashMap<Integer, Integer>完全相同的内存量,其中每个键映射到相同的Integer BigExpensiveObject 1}}。整个程序中唯一的内存差异是 one Integer one {{1}}之间的内存差异。