Java 键值参数与通配符匹配

Java 键值参数与通配符匹配,java,data-structures,hash,wildcard,Java,Data Structures,Hash,Wildcard,我有大量映射到文件路径的键值参数。大多数具有以下形式 filepath : /some/path param_name_1 => 1234 param_name_2 => qwerty 但是其他的可以包含通配符 filepath : /other/path param_name_1 => 123*4 param_name_2 => ab?12 其中,?是匹配任意一个字符的通配符,*是匹配0+个字符的通配符 我的用户可以提供他们自己的KV参数集,我必须匹配这些参数并返回

我有大量映射到文件路径的键值参数。大多数具有以下形式

filepath : /some/path
param_name_1 => 1234
param_name_2 => qwerty
但是其他的可以包含通配符

filepath : /other/path
param_name_1 => 123*4
param_name_2 => ab?12
其中,
是匹配任意一个字符的通配符,
*
是匹配0+个字符的通配符

我的用户可以提供他们自己的KV参数集,我必须匹配这些参数并返回映射路径

示例:用户提供

param_name_1 => 1234
param_name_2 => qwerty

Application returns /some/path
param_name_1 => 123asdqweqweqdqweq1231asdcase4
param_name_2 => abW12

Application returns /other/path
用户提供

param_name_1 => 1234
param_name_2 => qwerty

Application returns /some/path
param_name_1 => 123asdqweqweqdqweq1231asdcase4
param_name_2 => abW12

Application returns /other/path
对于所有不包含通配符的映射,我可以为存储的映射和用户提供的映射计算
hashCode()
,并执行非常快速的
HashMap
查找(要匹配3-4个参数,100000个映射,在0毫秒内,这毕竟是一个哈希)

但是,对于包含通配符的映射,我一直在通过包含通配符的所有映射的列表进行线性查找。大约有2000-5000个这样的映射,每次查找只需不到200毫秒,我需要加快速度


是否有一种方法可以进行常规查找以匹配通配符或其他一些匹配技术来组合所有映射?

如果使用
TreeMap
而不是
HashMap
,则可以进行前缀搜索以减少必须迭代的项目数。只需抓取出现在
*
之前的字符,并遍历以这些字符开头的所有键。当然,如果您的搜索词以通配符开头,这将不起作用


解决这个问题的另一种常见方法是使用字符
ngrams
或一些基于trie的结构,但这要复杂得多。

对于我正在处理的数据集,
ngrams/trie结构
可能太大了,并且有各种可能的组合。我将研究如何使用前缀
TreeMap