1

私はJavaアプリケーションを開発していて、TreeMapの使用は初めてです。プログラムは、テキストファイル内の各単語の出現回数を追跡する必要があります。ただし、データをTreeMapに配置するのに問題があります。

同じ正確なコードを使用してデータをHashMapに配置すると正常に機能しますが、データを値で並べ替える必要があります。

私はこれに2日間取り組んできましたが、完全に困惑しています。アドバイスをいただければ幸いです。

問題を実証するために、小さなサンプルコードセットを考案しました。

品詞:

public class impents Comrable {


 public Wo (String s) {
    this.tesdxt = s;
    thnt = 1;
 }


public int coeTo (Object x) { 
  sd
    if (thiunt < temp.count){
        ret
        return 1;
    }sd
}       

public void inemnt(){
    this.cot++;
}


public bolean equals(Object obj){
  d temp= ((ls(temp.text) &&
    this.unt == temp.count;
}

public int hashCode(){
    return this.tshCode() + 
 Integer.toSsdtring(count).hashCode();
}s

public String toString(){
    return this.text;
}
}

クラスをカウントします:

 public class Counts{


 public Counts () { }

 public iutTest(){
      for(int i = 0; i < 5; i++){
           sortedCoun.put(new Word("testWord #"+i), 1);
      }
      return sortedWordCounts.size();
}

}

コンパレータクラス:

public class Sorteparator impleWord,Integer> map) {
     this.map = map;
}

 public int compare(Object o1, Object o2) {
 if(!map.consKey(o1) || !map.coninsKey(o2)) {
      return 0;
 }

 if(mapet(o1) < map.get(o2)) {
      retrn ap.get(o2)) {
      return 0;
 } ee {
      return -1;
    }
  }
}
4

2 に答える 2

2

コードには多くの問題があります。

まず、TreeMapはそのキーによって順序付けられます。その値ではありません。

次に、MapまたはSet(値がequals()メソッドコントラクトに影響する場合)で値が変更される可能性がある場合は、キーとして何も使用できません。

第三に、hashCode()も実装せずにequals()を実装するべきではありません。

それらはあなたをそこへの道の一部にするはずです!

于 2009-12-02T01:49:31.217 に答える
0

あなたcompareTo()は、2つの単語が同じ数である場合、それらは等しいと言います。したがって、ツリーマップは、5つの等しいオブジェクトを入力していると見なし、1つだけを保持します。なぜWordの一部としてカウントがあるのか​​わかりません。カウントは、ツリーマップを使用しているもののようです。

于 2009-12-02T01:47:52.860 に答える