我有一个键值系统(HashMap),其中String将作为键,例如“2014/12/06”。
LinkedHashMap<String, Value>
所以,我可以通过键名检索到一个项目,但我要找的是一种方法来检索与部分键匹配的值列表,我的意思是,如何检索所有2014年的值?
我想避免像测试列表中的每个项目、暴力搜索或类似解决方案。
谢谢。
我有一个键值系统(HashMap),其中String将作为键,例如“2014/12/06”。
LinkedHashMap<String, Value>
所以,我可以通过键名检索到一个项目,但我要找的是一种方法来检索与部分键匹配的值列表,我的意思是,如何检索所有2014年的值?
我想避免像测试列表中的每个项目、暴力搜索或类似解决方案。
谢谢。
使用TreeMap,在其中键已排序,因此可以找到第一个大于或等于“2014/01/01”的键(使用map.getCeilingEntry("2014/01/01")
),然后从那里开始遍历所有键。
使用Map层次结构 - 即 Map<String,Map<String,Value>>
。外部Map中的键将是年份。内部Map中的键将是完整日期。
仅使用LinkedHashMap不可能实现。如果您可以将键复制到有序列表中,则可以对其执行二进制搜索,然后使用完整的键调用LinkedHashMap.get(...)。
TreeMap
而不是LinkedHashMap
。 LinkedHashMap
按插入顺序排序,这对此无用,但TreeMap
按自然排序或您提供的Comparator
排序。这意味着您可以高效地(在对数时间内)找到以2014
开头的第一个条目,然后迭代直到找到第一个不匹配的条目。Map
。您需要研究全文搜索和索引。您可以尝试像Lucene这样的东西。