有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用HashMap代替数据库进行java搜索

我必须根据数据库中的1个值查找价格。数据库表包含40000个id、名称、minvalue、maxvalue和price的条目。我查找值2的正确价格,例如

SELECT name, price FROM priceTable WHERE minvalue <= 2 AND maxvalue >= 2;

因为我必须查找许多价格(10000或更多),我考虑使用HashMap之类的东西,所有的表数据都在里面,所以我只有一个数据库请求,其余的将在本地完成

有人有这方面的经验吗?是否可以将SQL请求“转换”为高效的HashMap查找?我无法使用该值作为键进行查找,因为上面示例中的匹配条目具有minvalue 1和maxvalue 3。因此不会有一个键“2”


共 (1) 个答案

  1. # 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