【问题标题】:How to get all the key-values underlying between two given keys in a sorted hashmap?如何获取排序哈希图中两个给定键之间的所有键值?
【发布时间】:2019-05-29 18:48:55
【问题描述】:

我有一个以 Time 为键的 HashMap。我对HashMap进行了排序。 现在我想获取两个键之间的所有键值,即时间值。

【问题讨论】:

  • HashMap 无法排序。我猜你有一个 TreeMap?
  • 过滤掉那些“之前”最小和“之后”最大数据。这样做时您遇到了什么麻烦?
  • 正如@SeanPatrickFloyd 提到的那样,没有像HashMap 这样的东西。而TreeSet排序的有一个内置的方法
  • 你试过什么?什么地方出了错 ?举个例子输入/输出?
  • 你的意思是链接哈希图吗?

标签: java hashmap hashtable treemap


【解决方案1】:

这是一些示例代码。 TreeMap 实现了接口 NavigableMap,因此请确保将其用作变量类型,以充分利用 TreeMap 的功能:

NavigableMap<Integer, String> map = new TreeMap<>();
// code to fill my map with values from 1 to 20, key=int, value=String.valueOf(int)
IntStream.rangeClosed(1,20).forEach(i->map.put(i, String.valueOf(i)));

NavigableMap 有一个方法 .subMap(start, end) 和一个重载 .subMap(start, startInclusive, end, endInclusive) 用于选择地图的局部视图,听起来这就是你所需要的。

NavigableMap<Integer, String> subMap = map.subMap(5, false, 10, false);

这是我之前创建的地图的实时视图,但它仅包含键 5 和 10 之间的映射,独占。让我们检查一下它是否按预期工作:

subMap.forEach(
    (k, v) -> System.out.printf("Key: %d, value: '%s'%n", k, v)
);

输出:

键:6,值:'6'
键:7,值:'7'
键:8,值:'8'
键:9,值:'9'

如您所见,地图保持排序状态,但仅限于指定范围。

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多