Возникла необходимость оптимизировать работу со String и BufferedReader
Как я понимаю, проблема в большом количестве создаваемых новых экземпляров строки. Очень прошу, при возможности, объяснить, как правильно поступить и почему именно следует писать код.
public class ExtensionFilter implements FilenameFilter {
private String extension;
ExtensionFilter(String extension) {
this.extension = extension;
}
public boolean accept(File dir, String name) {
String f = new File(name).getName();
return f.indexOf(extension) != -1;
}
}
public class NonUniqueWords {
public static void main(String[] args) {
TreeSet
FilenameFilter filter = new ExtensionFilter(extension);
File dir = new File(dirName);
String[] filenames = dir.list(filter);
for (String filename : filenames) {
try (BufferedReader br = new BufferedReader(new FileReader("D://PROJECT//" + filename))) {
while ((s = br.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(s);
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
treeSet.add(token);
}
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
System.out.println("The amount of non-unique words: " + treeSet.size());
}
}
Ответ
Проблем со строками здесь не увидел. В качестве оптимизации алгоритма могу предложить вместо TreeSet использовать HashSet.
TreeSet хранит данные в отсортированном виде, но при этом имеет логарифмическую сложность алгоритма добавления элементов. В HashSet порядок элементов не определен, а время добавления элементов константное.
Учитывая, что для вашего алгоритма порядок элементов не важен, то эта замена ускорит выполнение кода, но не отразится на результате.
Комментариев нет:
Отправить комментарий