复合键v / s 2级间接

时间:2009-06-08 22:38:30

标签: java

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

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

{class} - &gt; {Boolean,string}

第一种方法有1级间接,第二种方法有2种......这里的优点和缺点是什么?第二种方法是不是很糟糕?

1 个答案:

答案 0 :(得分:2)

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

然而,如果它纯粹是一个性能决定,所有其他条件相同(例如访问模式不支持这种或那种方式,好的哈希函数,稀疏映射等),我会认为HashMap&lt; Key&lt; X,Y>,Z>将比HashMap快&lt; X,Map&lt; Y,Z&gt;&gt; - 我想认为较大的HashMap中的1次查找比较小的地图中的2次查找要快。

既然你有一个布尔键,也可以考虑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));