我们必须根据三个输入数据字段查找一些数据.查找必须快速.只有大约20种可能的查找组合.我们使用静态HashMap实例实现了这一点,我们通过连接三个数据字段来创建密钥.有没有更好的方法来做到这一点,或者这是要走的路?代码如下.
更新:我并不是说这段代码很慢.只是好奇是否有更好的方法来做到这一点.我认为可能会有一个更优雅的解决方案,但如果没有令人信服的替代方案,我很乐意保持这一点!
创建类级静态HashMap实例:
private static HashMap map = new HashMap();
我们如何将数据加载到内存中:
private void load(Iterator iterator) {
while (iterator.next()) {
Object o = it.next();
key = o.getField1() + "-" + o.getField2() + "-" o.getField3();
map.put(key, o.getData());
}
}
以及我们如何根据以下三个字段查找数据:
private Stirng getData(String f1, String f2, String f3) {
String key = f1 + "-" + f2 + "-" f3;
return map.get(key);
}
解决方法:
那么,问自己的问题当然是“它足够快吗?”因为除非你的应用程序需要更快,这是瓶颈,否则它无关紧要.你所拥有的已经相当有效.
话虽这么说,如果你想从这个例程中挤出所有可能的速度(不用汇编语言重写它;-)你可能会考虑使用数组而不是HashMap,因为只有少量有限数量的键.您必须开发某种散列函数,将每个对象散列为0到19之间的唯一数字(或者实际上有多少元素).您也可以优化该哈希函数的实现,但我不知道如何在不知道您正在使用的对象的详细信息的情况下如何做到这一点.