【发布时间】:2017-07-25 14:00:59
【问题描述】:
就空间和运行时间而言,使用哈希表在目录中搜索特定文件是否有效?我想创建一次索引,并在需要时重新创建索引,但搜索速度相对较快。
我将 hashCode 存储为键,将文件名存储为值。
private Map<Integer,String> indexDirectoryByHash()
{
Map<Integer,String> hashTable = new Hashtable<Integer, String>();
File directory = new File(this.path);
File[] directoryFiles = directory.listFiles();
String filename;
int hashCode;
for (int i = 0; i < directoryFiles.length; i++)
{
filename = directoryFiles[i].getName();
hashCode = filename.hashCode();
hashTable.put(hashCode,filename);
}
return hashTable;
}
public boolean searchFile(String filename)
{
if (hash.get(filename.hashCode()) != null)
return true;
else
return false;
}
好的,将其更改为使用集合而不是哈希表。
private Set<String> indexDirectoryByHashSet()
{
Set<String> files = new HashSet<String>();
File directory = new File(this.path);
File[] directoryFiles = directory.listFiles();
String filename;
for (int i = 0; i < directoryFiles.length; i++)
{
filename = directoryFiles[i].getName();
files.add(filename);
}
return files;
}
public boolean searchFile(String filename)
{
return fileSet.contains(filename);
}
【问题讨论】:
-
hashCode 不是唯一标识符。只需使用 Set
来存储文件名。这就是您需要知道文件名是否存在的全部内容。 -
我强烈建议您不要使用
Hashtable。它已经过时了将近 19 年,并且在 Java 集合框架之前存在并且不是 Java 集合框架的一部分。使用替换Map实现之一。