我有一组唯一的键值对,键和值都是字符串。对的数量非常巨大,找到某个字符串的值对时间非常重要。
预先计算对,并为特定程序给出。所以我可以写一个包含以下内容的方法:
public String getValue(String key)
{
//repeat for every pair
if(key.equals("abc"))
{
return "def";
}
}
但我说的是超过250,000对,也许对它们进行排序可能会更快......
我有一个包含getValue()
方法的类,可以使用它的构造函数,但是没有连接到任何数据库/文件系统等。所以每个对都必须在类中定义。
您是否有任何想法可能比一系列if语句更快?也许使用排序图来获得对预分类。也许通过反序列化已经创建的地图来改善构造函数时间?
我希望您的答案包含您的方法的基本代码示例,我会用相应的时间来评论答案,它需要一组对!
时间范围:对于一个构造函数调用和20个getValue()
1000毫秒的调用。
键的大小为256,值的大小为< 16
答案 0 :(得分:5)
这正是hash table的用途。如果正确实现,它提供O(1)
查找,这意味着只要您有足够的内存并且您的哈希函数和冲突策略是智能的,它就可以在恒定时间内获取键的值。 Java有多个哈希支持的数据结构,从HashMap<String, String>
为你做的事情的声音。
您可以像这样构建它:
Map<String, String> myHashTable = new HashMap<String, String>();
添加如下值:
myHashTable.put("abcd","value corresponding to abcd");
并获取这样一个键的值:
myHashTable.get("abcd");
当你有直觉感觉运行所有密钥并且检查效率不高时,你就是正确的轨道,这将是O(n)
运行时方法,因为你必须运行所有n
1}}元素。