在HashMap中搜索而不是数据库

时间:2015-11-09 12:46:32

标签: java hashmap

我必须根据数据库中的1个值来查询价格。数据库表包含40000个带有id,name,minvalue,maxvalue,price的条目。我用例如

查找值2的正确价格
SELECT name, price FROM priceTable WHERE minvalue <= 2 AND maxvalue >= 2;

因为我必须查找许多价格(10000及以上),我考虑使用类似HashMap的内容,其中包含所有表数据,所以我只有1个数据库请求,其余的将在本地完成。

有没有人经历过这个?是否可以将SQL请求“转换”为有效的HashMap查找?我无法使用该值作为查找键,因为例如上面例子的匹配条目有minvalue 1和maxvalue 3.所以没有键“2”。

1 个答案:

答案 0 :(得分:1)

Java提供了NavigableMap接口,它提供了一些有趣的导航方法,包括:

subMap(fromKey::inclusive, toKey::exclusive)

headMap(toKey, boolean inclusiveOrNot)

tailMap(fromKey, boolean inclusiveOrNot)

它适用于一种类型的键(为方便起见,它说它在某种程度上等同于sql索引;这里需要两个索引)。因此,在您的情况下,您需要使用两个不同的地图存储priceTable,一个用于minValue,一个用于maxValue,例如:

NavigableMap<Double, List<Product>> minValueMap = new TreeMap<Double, List<Product>>();
NavigableMap<Double, List<Product>> maxValueMap = new TreeMap<Double, List<Product>>();

然后,要获得minvalue <= 2 AND maxvalue >= 2,你必须运行:

Map<Double, List<Product>> minConditionMap = minValueMap.headMap(2, true);
Map<Double, List<Product>> maxConditionMap = maxValueMap.tailMap(2, true);

您的结果是这些地图的交集(请参阅here