Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在性能方面,映射的映射与键串联的单个映射相比,哪一个更好?_Java_Performance_Caching_Dictionary_Hashmap - Fatal编程技术网

Java 在性能方面,映射的映射与键串联的单个映射相比,哪一个更好?

Java 在性能方面,映射的映射与键串联的单个映射相比,哪一个更好?,java,performance,caching,dictionary,hashmap,Java,Performance,Caching,Dictionary,Hashmap,我正在用Java实现缓存(显然它有get()和put()方法)。我有两个字符串键和一个对象值 Key1+Key2-->Val(“Key1”+“Key2”是键,Val是缓存值) 我有以下两种方法用基本操作实现缓存 方法1: void SingleMap.put(Key1 + Key2, val){ } 有单个映射,比如说SingleMap,这里的键是两个键的串联(Key1+Key2) 获取方法签名: Val SingleMap.get(Key1 + Key2){ } Void OuterMa

我正在用Java实现缓存(显然它有
get()
put()
方法)。我有两个字符串键和一个对象值

Key1+Key2-->Val
(“Key1”+“Key2”是键,Val是缓存值)

我有以下两种方法用基本操作实现缓存

方法1

 void SingleMap.put(Key1 + Key2, val){ }
有单个映射,比如说
SingleMap
,这里的键是两个键的串联(
Key1+Key2

获取方法签名

Val SingleMap.get(Key1 + Key2){ }
Void OuterMap.put(Key1, new InnerMap(key2, val));
Put方法签名

 void SingleMap.put(Key1 + Key2, val){ }
方法2

Val SingleMap.get(Key1 + Key2){ }
Void OuterMap.put(Key1, new InnerMap(key2, val));
我们将使用两张地图

InnerMap<Key2, val>

OuterMap<Key1, InnerMap> 
Put方法签名

Val SingleMap.get(Key1 + Key2){ }
Void OuterMap.put(Key1, new InnerMap(key2, val));

实现缓存的最佳方法(性能方面)是什么?

如果您有其他更好的方法,请告诉我。

从性能角度看,您的第一种方法会更快,因为它只需要从1个地图中获取信息。 但是,如果使用此方法,则必须确保关键点始终保持相同的顺序(key1永远不能是key2),否则必须将key1+key2和key2+key1添加到贴图中


有关集合性能的更多信息:

您可能没有注意到性能方面有多大的差异(您尝试了什么吗?),但从内存的角度来看,第一种方法可能更好,具体取决于外部键集的大小(即最终会有多少个内部映射)。此外,如果在任何情况下都必须提供两把钥匙,那么问题是为什么会有两把钥匙。