我试图找到一种数据结构,该数据结构从一系列值中获取特定值并将其映射到键。
例如,我具有以下条件:
我的值为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