java - 复合键 v/s 2 级间接

标签 java

HashMap<Pair<Class<T>,Boolean>,String> abc = new HashMap<Pair<Class<T>,Boolean>,String>();

我这里有两种方法...创建一个 key{class, Boolean} -> {string} 或者我也可以这样做。

{类} -> { boolean 值,字符串}

第一种方法有 1 级间接,而第二种方法有 2 级...这里有什么优点和缺点?第二种方法不好吗?

最佳答案

理想情况下,选择最好由问题/解决方案领域的自然情况驱动。 Key 是否代表域中的任何内容? Map 是否表示域中的任何内容?使用 1 级或 2 级间接可能是您最终想要隐藏的实现细节。

但是,如果这纯粹是性能决策,那么在所有其他条件相同的情况下(例如,访问模式不偏向于一种方式或另一种方式、良好的哈希函数、稀疏映射等),我会认为 HashMap, Z> 会比 HashMap> 更快 - 我认为较大的 HashMap 中的 1 次查找比较小的映射中的 2 次查找更快。

由于您有一个 boolean 键,因此还可以考虑使用 2 个 HashMap 表(一张表示 true,一张表示 false)和一些三元运算符 (?:) 魔法:

final Map<Class, String> falseMap = new HashMap<Class, String>();
final Map<Class, String> trueMap = new HashMap<Class, String>();

final String s = ((booleanKey ? trueMap: falseMap).get(classKey));

关于java - 复合键 v/s 2 级间接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/967378/

相关文章:

java - 获取 url.getContent() 时出现问题

Java ftp4j - 以 amn 主动模式连接时列出 FTP 服务器中的文件

java - 调试在 Oracle JVM 中运行的 Java 代码

java - 如何编译位于不同包中的依赖 .java 文件

java - H2 DB 与 datetime2

java - org.openqa.selenium.SessionNotCreatedException

java - 如何在 Android 中调用 `POST` RESTfull 方法?

java - 使用 javax.measure 将平方米换算为平方公里

java - 使用 FOP 将 XML 转换为 PDF 返回空白页面

java - 在 Android 中将 PDF 作为电子邮件附件发送