У меня есть список слов, 1000 слов, я должен перечислить их из наиболее встречающихся наименее встречающихся.Сортировка списка с помощью тем в Java
Как:
Dog, 100 times
Cat, 50 times
Fish, 40 times
Monkey, 10 times
Bird, 10 times
Camel, 10 times
.
.
.
Lion, 1 times
Tiger, 1 times
Я сделал это и работает с петлей в то время, но это занимает, как 10 секунд, следующая часть задачи является использование темы и сделать сортировку за меньшее время. Я планирую использовать 5 потоков, я могу использовать их и запускать индивидуально, например Thread1 может сортировать 1-200, Thread2 может сортировать 201-400, Thread3 может сортировать 401-600 ... но тогда в конце я бы имел 5 разных списков ? Было бы 10 собак в списке Thread1, 20 собак в списке Thread2 ... Смешанный на консоли ... Я бы хотел, чтобы это было как на примере выше, используя 5 потоков, возможно ли это? Не могли бы вы дать несколько советов, я новичок в Threads.
Редактировать: Я использую встроенную функцию сортировки, пока не важно, какой алгоритм сортировки я использую. Задача состоит не в том, чтобы использовать лучший алгоритм сортировки, а для сортировки с Threads.
Код:
//This is the list
ArrayList<String> animalList = new ArrayList<String>();
//This is the map from the list
Map<String, Integer> map = new HashMap<String, Integer>();
for (String temp : animalList) {
Integer count = map.get(temp);
map.put(temp, (count == null) ? 1 : count + 1);
}
//This is the final map
TreeMap<String, Integer> sortedMap = sortMapByValue(map);
public static TreeMap<String, Integer> sortMapByValue(Map<String, Integer> map){
Comparator<String> comparator = new ValueComparator(map);
TreeMap<String, Integer> result = new TreeMap<String, Integer>(comparator);
result.putAll(map);
return result;
}
public class ValueComparator implements Comparator<String>{
HashMap<String, Integer> map = new HashMap<String, Integer>();
public ValueComparator(Map<String, Integer> map2){
this.map.putAll(map2);
}
@Override
public int compare(String s1, String s2) {
if(map.get(s1) >= map.get(s2)){
return -1;
}else{
return 1;
}
}
}
алгоритм Что сортировки? Возможно, это первое место, которое нужно оптимизировать, а не пытаться ускорить его с помощью многопоточности. – copeg
, это не должно происходить примерно через 100 секунд.Вы делаете что-то очень неэффективное где-то – Cruncher
@Cruncher Я не пытаюсь сортировать кошек и собак ... 100 - всего лишь пример. – Anarkie