【发布时间】:2016-11-20 04:34:52
【问题描述】:
我已将文件中的字符串存储到 ArrayList 中,并使用 HashSet 来计算每个字符串的出现次数。
我希望列出前 5 个单词及其出现次数。我应该能够在不实现哈希表、树图等的情况下完成此操作。我该如何实现呢?
这是我的数组列表:
List<String> word_list = new ArrayList<String>();
while (INPUT_TEXT1.hasNext()) {
String input_word = INPUT_TEXT1.next();
word_list.add(input_word);
}
INPUT_TEXT1.close();
int word_list_length = word_list.size();
System.out.println("There are " + word_list_length + " words in the .txt file");
System.out.println("\n\n");
System.out.println("word_list's elements are: ");
for (int i = 0; i<word_list.size(); i++) {
System.out.print(word_list.get(i) + " ");
}
System.out.println("\n\n");
这是我的哈希集:
Set<String> unique_word = new HashSet<String>(word_list);
int number_of_unique = unique_word.size();
System.out.println("unique worlds are: ");
for (String e : unique_word) {
System.out.print(e + " ");
}
System.out.println("\n\n");
String [] word = new String[number_of_unique];
int [] freq = new int[number_of_unique];
int count = 0;
System.out.println("Frequency counts : ");
for (String e : unique_word) {
word[count] = e;
freq[count] = Collections.frequency(word_list, e);
System.out.println(word[count] + " : "+ freq[count] + " time(s)");
count++;
}
会不会是我想多了一步?提前致谢
【问题讨论】:
-
创建一个内部类,比如 Z,它有两个字段 - word、count,它实现了
Comparable<Z>并覆盖了hashcode()和equals()方法。创建此类的实例集 - 如果集合包含对象,则获取它并增加计数。使用Collections.sort()对其进行排序。你去吧。 -
也就是说,Hashmap 可能是更好的方法
-
在 Apache Commons 中有一个简单的实现,使用
HashBag