我正在尝试找到一种数据结构,该数据结构从一系列值中获取特定值并将其映射到键。
比如我有以下条件:
- 从1到2.9,我想把它映射到A。
- 从4到6,我想把它映射到B。
- 从 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/