我必须根据数据库中的 1 个值查找价格。数据库表包含 40000 个条目,其中包含 id、name、minvalue、maxvalue、price。我查找值 2 的正确价格,例如
SELECT name, price FROM priceTable WHERE minvalue <= 2 AND maxvalue >= 2;
因为我必须查找许多价格(10000 甚至更多),所以我考虑使用 HashMap 之类的东西,其中包含所有表数据,所以我只有 1 个数据库请求,其余的将在本地完成。
有人有这方面的经验吗?是否可以将 SQL 请求“转换”为高效的 HashMap 查找?我无法使用该值作为查找的键,因为例如上面示例的匹配条目具有最小值 1 和最大值 3。因此不会有键“2”。
最佳答案
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);
您的结果是这些 map 的交集(参见 here )
关于java - 在 HashMap 中搜索而不是在数据库中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609438/