我遇到许多键指向单个值的情况。这种情况来自我正在实施的服务定位器模式 -
因此,我需要在用户请求任何匹配键时检索单个值。
从某种意义上说,我需要与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实用程序。
答案 0 :(得分:6)
HashMap
实际上就是你需要的,问题在于你误解了它的作用。
如果没有优化的方法,我总是可以使用HashMap为每组键复制值,我希望避免使用。
HashMap
不会将每个键映射的值的副本存储到该值。 HashMap
将引用存储到Java对象。它的成本始终相同。一个HashMap<Integer, BigExpensiveObject>
,其中每个键映射到相同的BigExpensiveObject
,与HashMap<Integer, Integer>
完全相同的内存量,其中每个键映射到相同的Integer
BigExpensiveObject
1}}。整个程序中唯一的内存差异是 one Integer
和 one {{1}}之间的内存差异。