Страницы

Поиск по вопросам

вторник, 9 июля 2019 г.

Оптимизация программы при работе со строками

Возникла необходимость оптимизировать работу со 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 treeSet = new TreeSet<>(); String dirName = "D://PROJECT"; String extension = ".java"; String s;
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 порядок элементов не определен, а время добавления элементов константное.
Учитывая, что для вашего алгоритма порядок элементов не важен, то эта замена ускорит выполнение кода, но не отразится на результате.

Комментариев нет:

Отправить комментарий