通过前缀从属性文件中读取属性的最有效解决方案是什么?

时间:2016-05-11 22:24:07

标签: java

通过前缀从属性文件中读取属性的最有效(就时间复杂度而言)的解决方案是什么?

例如,如果属性文件看起来像这样 -

prefix1.prop1=val1
prefix1.prop2=val2
prefix2.prop3=val3
prefix2.prop4=val4

我正在寻找一种方法,当这样调用时,getPropertiesByPrefix("prefix1")应返回以下列表:

["prefix1.prop1", "prefix1.prop2"]

我可以看到2个选项 -

  1. 在每次getPropertiesByPrefix来电时,逐个阅读所有属性并获取以前缀开头的道具。
  2. 读取属性一次并构建一个trie,然后getPropertiesByPrefix使用trie。
  3. 第二种选择似乎是更有效的方式。是否有任何现有的实现/第三方库?还是第三种选择?

1 个答案:

答案 0 :(得分:1)

分析很简单。

假设您有properties个n个密钥,那么key.startsWith(prefix)的循环将在O(m*n)时间运行,m是前缀的大小。

另一方面,如果您构建Trie,则可以减少O(m),这显然更好。

Apache Commons有一些实现,虽然如果n在这里很小,那么我真的不会打扰并避免为我的代码增加复杂性并使用简单的循环。