私は単語とその頻度を保持するためにsplaytreeを実装しており、各単語頻度を保持するPairクラスを作成することを選択しました値)ペア。すなわち、splaytreeの各ノードはペアのペアを保持する。一般的なPairクラスとSplaytreeを使って単語とその頻度をJavaでカウントして保存する
public class SplayEntry<K, V> implements Comparable<SplayEntry<K, V>>{
public K word;
public V frequency;
public SplayEntry(K word, V frequency) {
this.word = word;
this.frequency = frequency;
}
getters, setters, hashCode, equals, compareTo etc...
スプレー木::
public class SplayTree<AnyType extends Comparable<? super AnyType>> {
public SplayTree()
{
nullNode = new BinaryNode<AnyType>(null);
nullNode.left = nullNode.right = nullNode;
root = nullNode;
}
そしてBinaryNodeクラスを持つペアクラスは次のようになります。
私が問題を抱えているのは、すべての単語と周波数のペアがツリーに配置され、そのペアがすでに存在するかどうかを確認することです。
public void countWords(String line) {
line = line.toLowerCase();
String[] words = line.split("\\P{L}+");
SplayEntry<String, Integer> entry = new SplayEntry<String, Integer>(null, null);
for (int i = 0, n = words.length; i < n; i++) {
Integer occurances = 0;
entry.setWord(words[i]);
entry.setFrequency(occurances);
if (tree.contains(entry.equals(entry)) && entry.getFrequency() == 0) {
occurances = 1;
} else {
int value = occurances.intValue();
occurances = new Integer(value + 1);
entry.setFrequency(occurances);
}
entry = new SplayEntry<String, Integer>(words[i], occurances);
tree.insert(entry);
}
}
私はこれは本当に動作していない知っていると私は把握して助けを必要とする:私は、今の混乱である()メソッドcountWordsを行うラインで、テキストファイルの行を読み込み、単語に各ラインを分割しましたどのようにSplayEntryクラスをどのようにインスタンス化する必要がありますか?また、単語配列のすべての単語について、ツリー(包含)内のSplayEntryに存在するかどうかをチェックし、単語が新しい単語の場合は頻度が1になり、そうでない場合は頻度が+1する。最後に、新しいSplayEntryをSplaytreeに追加し、それを適切なノードに配置させます。
今のところ、同じコードを必要以上に処理することが混乱しています。私は正しい方向に私を導くポインタを非常に感謝しています。
ありがとうございます。私が自分自身を明確にしていないかどうか教えてください。
hashCode()を実装しましたか? – JustinKSU
forループの先頭に新しいエントリを作成します(その前ではありません)。新しいエントリを作成するのではなく、前のエントリを更新しているようです。 – JustinKSU
私は確かに変更可能なエントリを使うことを検討し、毎回新しい 'SplayEntry'を作成しません。つまり、あなたは 'splay = tree.get();のようなコードを書くでしょう。 if splay == null tree.insert(new SplayEntry ...)else splat.add(value + 1)or so'。 – Gray