xpa*_*oob 3 java hashmap multidimensional-array
我经常使用多维 HashMap,即包含 HashMap 的 HashMap。例如,在两键的基础上,我设置/获取一个存储值
hashmapMulti.get(key1).put(key2,x);
hashmapMulti.get(key1).get(key2);
Run Code Online (Sandbox Code Playgroud)
但是,我也可以使用“平面”哈希图并组合两个键来设置/获取值:
hashmapFlat.put(key1+"|"+key2,x);
hashmapFlat.get(key1+"|"+key2);
Run Code Online (Sandbox Code Playgroud)
如果我的信息正确的话, HashMap 的 put 和 get 的时间复杂度应该“或多或少”为O(1)。通过扁平化,我基本上用组合 3 个字符串的成本来交换 get(恒定时间)的成本。
哪种方式更快?
最佳选择是否取决于 HashMap 中存储的对象数量?
第三种选择是编写一个封装组合键的类。
它将有两个字段用于两个单独的键,如果您正确地重写它的equals()和hashCode()方法,则不必依赖于字符串连接。
虽然从性能角度来看,您的最佳选择是编写实际的基准测试并比较您的实现,但这绝对是最干净的解决方案:它可以立即读取,并且避免了对字符串连接的相当脆弱的依赖(即您可以拥有包含字符的键|)。
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |