java - 可以将一系列键映射到值的数据结构

标签 java dictionary data-structures range-map

我正在尝试找到一种数据结构,该数据结构从一系列值中获取特定值并将其映射到键。

比如我有以下条件:

  1. 从1到2.9,我想把它映射到A。
  2. 从4到6,我想把它映射到B。
  3. 从 6.5 到 10,我想把它映射到 C。

我有一个值 5,我想将它映射到一个键。所以根据以上条件,我应该把它映射到B。

有没有人可以推荐给我Java中的数据结构来解决问题?

目前我正在使用只能将值映射到键的哈希表。我试图将值的范围映射到哈希表中存在的特定值。但是,我陷入了将值范围映射到特定值的过程。所以现在我正在尝试使用另一种方法将值的范围映射到一个键。有谁知道我该如何解决这个问题?

编辑:

感谢 Martin Ellis,我决定使用 TreeMap 来解决这个问题。

最佳答案

您的范围是否不重叠?如果是这样,您可以使用 TreeMap:

TreeMap<Double, Character> m = new TreeMap<Double, Character>();
m.put(1.0, 'A');
m.put(2.9, null);
m.put(4.0, 'B');
m.put(6.0, null);
m.put(6.5, 'C');
m.put(10.0, null);

查找逻辑有点复杂,因为您可能需要包含查找(即 2.9 映射到“A”,而不是未定义):

private static <K, V> V mappedValue(TreeMap<K, V> map, K key) {
    Entry<K, V> e = map.floorEntry(key);
    if (e != null && e.getValue() == null) {
        e = map.lowerEntry(key);
    }
    return e == null ? null : e.getValue();
}

例子:

mappedValue(m, 5) == 'B'

更多结果包括:

0.9 null
1.0 A
1.1 A
2.8 A
2.9 A
3.0 null
6.4 null
6.5 C
6.6 C
9.9 C
10.0 C
10.1 null

关于java - 可以将一系列键映射到值的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399821/

相关文章:

Java:在客户端-服务器架构中发送 JSON 的最简单方法

python:以通用方式获取嵌套字典的值

c# - 来自字典 C# 的 Json 格式

java orm/数据访问对象 - 用于删除记录的接口(interface)

java - 检查当前 session 中是否存在声明的全局临时表

java - 创建通用的 groupBy 方法

java - 更新在 init() 内部初始化的 Map 对象以及来自 sql 表的值

c++ - 无法理解 LARGE_INTEGER 结构

data-structures - 程序终止时数据结构丢失

c++ - 如何使用模板链接数据结构中的节点对象?