java - 在 HashMap 中搜索而不是在数据库中搜索

标签 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 查找?我无法使用该值作为查找的键,因为例如上面示例的匹配条目具有最小值 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/

相关文章:

java - 我在这里使用父类(super class)构造函数调用是否有必要?

scala - 在 Scala 中指定 HashMap 的大小

java - 摩尔斯电码翻译器(简单)

java - 使用 JPA 2.1 注释调用 SQL Server 存储过程

java - CountDownLatch 不释放线程

java - 在后台线程中绘制应用程序的背景?

java - 用于以下场景的最佳数据结构(如 HashMap /列表等)是什么

c++ - 未声明的数组元素缺少 nullptr

java - Java中的HashMap和Map对象有什么区别?

java - Java HashMap 与 ArrayList 相比的内存开销