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

Gau*_*tam 2 java apache-commons guava

我有一种情况,许多键指向一个值.这种情况来自我正在实施的服务定位器模式 -

  • 接口中的每个方法都表示为签名字符串
  • 单个接口的所有这些签名都用作密钥
  • 该值是实现类的完整规范名称

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

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

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

例如以下所有签名

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

_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实用程序.

Lou*_*man 6

HashMap 实际上是你需要的,问题是你误解了它的作用.

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

HashMap不会将每个键映射的值的副本存储到该值. HashMap存储对Java对象的引用.它总是相同的成本.甲HashMap<Integer, BigExpensiveObject>,每一个键被映射到相同的BigExpensiveObject完全相同的存储器量作为HashMap<Integer, Integer>其中每个键被映射到相同的Integer.在整个程序中的只读存储器的区别是之间的差别内存一个 BigExpensiveObject一个 Integer.