这个问题的最佳数据结构?

时间:2011-06-26 17:52:13

标签: java hashtable lookup comparator treemap

我正在为这个程序使用Java,我目前有一种情况,我希望将键/值对添加到带有整数键的表中,例如

add (1, "Bobby")
add (6, "Sue")
add (3, "Mary")
add (8, "John")
add (15, "Joe")

所以很自然地我想做一个类似哈希表的东西,但是当我进行查找时,如果找不到确切的值,我希望它返回最大的密钥,该密钥不大于请求的密钥。

所以例如,如果我查找7,它应该返回“Sue”,但是如果我查找9,它应该返回“John”

我希望使用其中一个java util类(HashTable,TreeMap等),但我不太清楚该怎么做。

4 个答案:

答案 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)

如果您主要从结构中读取数据并且很少插入,那么您可以使用一个简单的排序数组并进行二分查找。如果你担心搜索性能,就不会变得更简单或更简单。如果你定期更新结构,那就不那么好了 - 那么你将不得不使用更复杂的东西。

我认为 - 但不完全确定 - 二叉树不会同样有效吗?搜索正确节点应该在的位置,如果找不到该值,则使用其前一个节点。