例如,我的代码中有一些位置,它从磁盘接收许多文件(其中许多是相同的),并进一步解组它们。
final File configurationFile = getConfigurationFile();
FileOutputStream fileOutputStream = new FileOutputStream(configurationFile);
Marshaller.marshal(configObject, fileOutputStream);
显然,我可以为它们创建一个特殊的缓存映射来提高性能(为了不再反复解组相同的文件)。就我而言,HashMap
实施就足够了。
问题是:我应该使用哪个键?
configurationFile.hashCode()
对此非常不好?
感谢您的所有答案!
答案 0 :(得分:0)
您也可以使用hashset而不必担心密钥。
if(hashset.add(file)) {
// do unmarshling;
} else {
//do nothing
}
如果可以添加对象,则Hashset.add()方法返回true。 如果您尝试添加重复条目,则它将返回false,因为不允许在集合中使用重复项。
答案 1 :(得分:0)
......一次又一次地使用相同的文件......
什么是相同的?
如果文件内容决定,您可以使用文件内容的哈希值(例如MD5,SHA1,SHA256)作为密钥。
如果文件名必须相同,只需使用文件名作为密钥。
如果是文件路径,则使用文件的完整路径作为密钥(File.getCanonicalPath()
)。
答案 2 :(得分:0)
使用规范路径而不是绝对路径(explanation of the difference)并将其放在HashSet中。集不允许重复的值。如果您尝试添加已存在的值,则返回false,否则为true。
示例代码(未经测试):
Set<String> filesMarshalled= new HashSet<>();
...
final File configurationFile = getConfigurationFile();
if (filesMarshalled.add(configurationFile.getCanonicalPath())) {
//not marshalled yet
FileOutputStream fileOutputStream = new FileOutputStream(configurationFile);
Marshaller.marshal(configObject, fileOutputStream);
}