我现在很困惑。我应该编写一个使用哈希表的程序。哈希表包含单词及其使用频率。 “Word”类包含一个计数器和字符串。如果该字已经在表中,则其频率增加。我一直在研究如何做到这一点,但我只是迷失了。我需要指出正确的方向。任何帮助都会很棒。
答案 0 :(得分:3)
Hashtable<String, Word> words = new Hashtable<String, Word>();
public void addWord(String s) {
if (words.containsKey(s) {
words.get(s).plusOne();
} else {
words.put(s, new Word(s));
}
}
这样就可以了。
答案 1 :(得分:3)
Hashtable现在是任何新Java代码的不寻常选择。我认为这是一种练习。
我会稍微关注任何尚未更新以使用新机制的练习。
在任何单线程场景中,HashMap将为您提供比Hashtable更好的性能。
但正如Emmanuel Bourg points out,Bag将为您完成所有这些而不需要Word类:只需将String对象添加到Bag中,行李将自动为您计算
无论如何,您被要求使用地图,地图可让您使用密钥快速查找内容。键可以是任何Object,并且Strings是非常常用的:它们是不可变的并且具有hashCode和equals的良好实现,这使它们成为理想的键。
javadoc for Map讨论了如何使用地图。 Hashtable是这个界面的一个实现,虽然它不是特别好的。
您需要一个好的密钥才能让您快速找到现有的Word对象,以便您可以增加计数器。虽然您可以将Word对象本身放入键中,但您可能需要做一些工作:更好的方法是使用Word包含的字符串作为键。
通过查找以String为键的值对象,可以找到Word是否已经在地图中。
答案 2 :(得分:1)
你最好使用一个Bag,它会保留每个元素的数量:
http://commons.apache.org/collections/api-release/org/apache/commons/collections/Bag.html
答案 3 :(得分:1)
这段代码应该可以解决您的问题
Hashtable <String, Word> myWords = new Hashtable<String, Word>();
Word w = new Word("test");
Word w = new Word("anotherTest");
String inputWord = "test";
if (myWords.containsKey(inputWord)){
myWords.get(inputWord).setCounter(myWords.get(inputWord).getCounter+1);
}
答案 4 :(得分:1)
鉴于班级Word
有一个计数器和一个字符串,我会使用HashMap<String, Word>
。如果您的输入是String
的数组,则可以使用以下命令完成此类操作:
public Map<String, Word> getWordCount(String[] input) {
Map<String, Word> output = new HashMap<String, Word>();
for (String s : input) {
Word w = output.get(s);
if (w == null) {
w = new Word(s, 0);
}
w.incrementValue(); // Or w = new Word(s, w.getCount() + 1) if you have no such function
output.put(s, w);
}
return output;
}