まず、aを使用しMap
て単語数を決定します。
String[] words = {"one", "two", "three", "two", "three", "three"};
Map<String, Integer> map = new HashMap<String, java.lang.Integer>();
for (String word : words) {
int count = 0;
if (map.containsKey(word)) {
count = map.get(word);
}
map.put(word, ++count);
}
System.out.println(map);
--> output: {two=2, one=1, three=3}
次に、TreeMap
または新しい「カスタム」キー/値クラスを使用して、カウントで並べ替えます。
使用TreeMap
:
private static void sortUsingTreeMap(Map<String, Integer> map) {
TreeMap<String, Integer> sorted = new TreeMap<String, Integer>(new MyComparator(map));
sorted.putAll(map);
System.out.println(sorted);
}
static class MyComparator implements Comparator<String> {
private Map<String, Integer> map;
MyComparator(Map<String, Integer> map) {
this.map = map;
}
@Override
public int compare(String o1, String o2) {
return map.get(o1).compareTo(map.get(o2));
}
}
--> output: {one=1, two=2, three=3}
新しいキー/値クラスの使用:
private static void sortUsingKeyValueClass(Map<String, Integer> map) {
class KeyValue implements Comparable<KeyValue> {
private final Integer count;
private final String word;
public KeyValue(Integer count, String word) {
this.count = count;
this.word = word;
}
@Override
public int compareTo(KeyValue o) {
return count.compareTo(o.count);
}
@Override
public String toString() {
return word + "=" + count;
}
}
List<KeyValue> keyValues = new ArrayList<KeyValue>();
for (String word : map.keySet()) {
keyValues.add(new KeyValue(map.get(word), word));
}
Collections.sort(keyValues);
System.out.println(keyValues);
}
--> output: [one=1, two=2, three=3]
また、パフォーマンスの面で必要であることがわかるまで、ミックスへのスレッドの追加を延期することも付け加えておきます。ここで他の人が述べているように、結果を同時に処理しても、不十分な実装は保存されません。