我想在ArrayList +他們的計數(發生頻率)中找到前10個最常見的字符串。Java:如何在ArrayList中找到前10個最常見的String +頻率?
我該如何處理最佳的時間複雜度?
下面的代碼發現的形式的最常見單詞+頻率(字符串= INT)
例如該= 2
public static Entry<String, Integer> get10MostCommon(WordStream words) {
ArrayList<String> list = new ArrayList<String>();
Map<String, Integer> stringsCount = new HashMap<>();
Map.Entry<String, Integer> mostRepeated = null;
for (String i : words) {
list.add(i);
}
for (String s : list) {
Integer c = stringsCount.get(s);
if (c == null)
c = new Integer(0);
c++;
stringsCount.put(s, c);
}
for (Map.Entry<String, Integer> e : stringsCount.entrySet()) {
if (mostRepeated == null || mostRepeated.getValue() < e.getValue())
mostRepeated = e;
}
return mostRepeated;
}
upvote for'Collectors.groupingBy()',我完全忘了這個很好的功能。 – hoefling
這就是做到這一點的方法。簡潔而優雅。 – duffymo
@FedericoPeraltaSchaffner該死的你擅長Java! – Iona