在Java世界中是否存在具有可变密钥长度的Map?

时间:2012-01-16 14:00:07

标签: java map hashmap

我需要一个Map但是当我调用get(key,n)时,它应该不仅应返回具有搜索键值的所有记录,还应该返回键的n个最后有效位与搜索相同的所有记录键(例如应用键和&(1<<(n + 1)-1))。

是否已经在Java中实现了这样的东西?

2 个答案:

答案 0 :(得分:10)

不完全,但您可以使用NavigableMap.subMap来实现此目的。 e.g。

NavigableMap<Integer, Value> map =
int keyBase = key & ~((1 << n)-1);
Map<Integer, Value> subMap = map.subMap(keyBase, true, keyBase + (1 << n), false);

如果要基于最低位而不是最高位进行搜索,则必须在添加和搜索之前反转这些位。这将把最低位,第二低位和第三低位等组合在一起。

答案 1 :(得分:2)

HashMap不会这样做,但TreeMap可以。

您需要对键进行标准化和反转(即决定要保留多少位,并反转这些位以使不太重要的位成为最重要的位)。然后,您可以从键中删除不太重要的位(以前是最重要的位),并使用树形图的范围搜索来查找答案。