我正在为这个程序使用Java,我目前有一种情况,我希望将键/值对添加到带有整数键的表中,例如
add (1, "Bobby")
add (6, "Sue")
add (3, "Mary")
add (8, "John")
add (15, "Joe")
所以很自然地我想做一个类似哈希表的东西,但是当我进行查找时,如果找不到确切的值,我希望它返回最大的密钥,该密钥不大于请求的密钥。
所以例如,如果我查找7,它应该返回“Sue”,但是如果我查找9,它应该返回“John”
我希望使用其中一个java util类(HashTable,TreeMap等),但我不太清楚该怎么做。
答案 0 :(得分:7)
NavigableMap可以解决问题。
答案 1 :(得分:4)
集合库中的TreeMap提供了您正在寻找的功能
TreeMap<Integer,String> tree = new TreeMap<Integer,String>();
tree.put (1, "Bobby");
tree.put(6, "Sue");
tree.put (3, "Mary");
tree.put (8, "John");
tree.put (15, "Joe");
System.out.println(tree.floorEntry(7)); // Sue
System.out.println(tree.floorEntry(9)); // John
答案 2 :(得分:0)
如果你想使用sql这样做:
select top 1 * from hashTable where keyColumnId >= @passedValueId
会起作用。
答案 3 :(得分:0)
如果您主要从结构中读取数据并且很少插入,那么您可以使用一个简单的排序数组并进行二分查找。如果你担心搜索性能,就不会变得更简单或更简单。如果你定期更新结构,那就不那么好了 - 那么你将不得不使用更复杂的东西。
我认为 - 但不完全确定 - 二叉树不会同样有效吗?搜索正确节点应该在的位置,如果找不到该值,则使用其前一个节点。