У меня есть ArrayList, заполненный словами из текстового файла, который мне нужно отсортировать по появлению слов, от самых возникающих до менее встречающихся. Я копирую оригинал ArrayList со словами в другой Arraylist, а также добавляю сверху число вхождений. Таким образом, слово в новом ArrayList будет выглядеть, например: «пароль: 125», где «пароль» - это слово, а «125» - количество вхождений в ArrayList.Сортировка ArrayList, приложение stuck
for (int i=0;i<sorter.size();i++) {
sorter2.add(sorter.get(i)+":"+Collections.frequency(sorter, sorter.get(i)));
}
Потом я отсортировать ArrayList с этим классом:
public class RepeatFormulaCounter implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
if (findValue(o2) != findValue(o1)) {
return findValue(o2) - findValue(o1);
}
return o2.compareTo(o1);
}
public int findValue(String find){
int result=0;
String spliter[]=find.split(":");
result=Integer.parseInt(spliter[1]);
return result;
}
}
Однако, как у меня есть 5 текстовых файлов, заполненных слов, которые 3 из файлов являются около 45 000 слов и 2 с более чем 1 000 000, файлы с около 45000 слов сортируются и отображаются без каких-либо проблем, но когда я начинаю сортировать те, у которых более 1 000 000 слов, приложение застревает. Почему это происходит? и как я могу это исправить?
Обратите внимание, что я использую приложение GUI для его отображения. И я использую 2 подобных класса сортировки для других способов сортировки по различным критериям, которые отображаются и выполняются без каких-либо проблем.
Что вы видите в GUI? Какие компоненты графического интерфейса вы используете? Скорее, проблема с компонентом GUI, который не способен обрабатывать слишком много точек данных. –
, потому что сортировка - это не тривиальная задача. какой алгоритм вы используете для сортировки? в любом случае вы должны быстрее выполнять функцию 'compare', не вызывайте findValue() два раза для обоих объектов. Целочисленный синтаксический анализ довольно дорог, если вы делаете это более 10 миллионов раз. – luk2302
Я показываю 10 самых популярных слов на «JTextArea», добавив 10 слов. – vsarunov