小编典典

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

java

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

例如,我具有以下条件:

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

我的值为5,我想将其映射到键。因此,根据上述条件,我应该将其映射到B。

Java中是否有任何人可以推荐给我解决问题的数据结构?

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

编辑:

感谢Martin Ellis,我决定使用TreeMap解决此问题。


阅读 224

收藏
2020-09-09

共1个答案

小编典典

您的范围不重叠吗?如果是这样,您可以使用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
2020-09-09