从Properties文件中读取v / s HashMap查找

时间:2012-05-25 14:55:22

标签: java performance hashmap

这是一种在内存和计算方面访问(键,值)对的更有效方法:使用properties.getProperty(“key”)从属性文件读取或将整个属性文件加载到HashMap中程序的开头,然后在HashMap中查找键?

此外,如果重复使用属性中只有一个值,那么最好将值存储在成员变量中并访问它或每次使用properties.getProperty(“key”)查找它吗? / p>

2 个答案:

答案 0 :(得分:14)

properties.getProperty("key")是来自Hashtable的查找,它是Properties对象。执行Properties.load()时,从文件中加载条目并将它们存储到Properties对象中,该对象扩展了Hashtable。对属性的每次后续访问都会在Hashtable中进行查找。再也没有文件IO了。

当然,访问成员变量比从HashMap中的键访问值稍快一些,但我怀疑这是否会在性能上获得任何重要性。 HashMap查找是O(1),并且很快。在注意到差异之前,您可能需要数百万次查找。为你做最可读的事情。

答案 1 :(得分:1)

实际上System.getProperty()内部使用java.util.Properties对象。 Properties类延伸HashTable<Object,Object>,因此通过明确使用HashMap来获取性能不太可能。

但是,如果您经常使用少量属性,那么将它们存储在变量中肯定会有所帮助。 HashTable / HashMap查找和变量访问可能都是O(1),但HashTable查找肯定有更大的常数因子。