0

ツリー セットを使用していくつかのシグナルをオブジェクトとしてツリー セットに保存していますが、同じシグナルが再び来たらオブジェクトを更新したいと考えています。これまでのところ、私は何かを試しましたが、問題は、印刷しようとすると完全なオブジェクトを取得できないことです。次に、オブジェクトを更新してセットに戻す方法があるかどうかわかりません...ここに私のコードSignal Class(Signal.java)があります

public class Signal implements Comparable<Signal>{

   String source;
   String name;
   int occurance;

   public void setSource(String source){
       this.source = source;
   }

   public void setName(String name){
       this.name = name;
   }

   public void setOccurance(int occurance){
       this.occurance = occurance;
   }


   public String getSource(){
       return this.source;
   }

   public String getName(){
       return this.name;
   }

   public int getOccurnace(){
       return this.occurance;
   }

@Override
public int compareTo(Signal arg0) {
    // TODO Auto-generated method stub
    return 0;
}
}

私のメインクラス

  public class SortedSetTest {

   public static void main(String[] args) {

      // Create the sorted set
      SortedSet<Signal> set = new TreeSet<Signal>();

      //Create a Signal object for each new signal
      Signal sig = new Signal();

      sig.setSource("Source");
      sig.setName("Signal Name");
      sig.setOccurance(1);

      // Add elements to the set
      set.add(sig);
      System.out.println(set); 

上記の印刷物は私をオブジェクトとして示しています...セットを文字列として見るにはどうすればよいですか?

      // Iterating over the elements in the set
      Iterator<Signal> it = set.iterator();
      while (it.hasNext()){

ここで、各オブジェクトを出力したいと思います 。たとえば、最初のオブジェクトを取得して、オブジェクト (信号) ソース、名前、発生などをセットの最後まで出力します。
} } }

4

4 に答える 4

1

toStringObject クラスのデフォルトの実装よりも使いやすい文字列を取得するには、Signal オブジェクトでオーバーライドする必要があります。

また、(常に 0 を返す) の実装に基づいてすべてのシグナルが等しいcompareToため、セットに複数のシグナルを追加することはできません。

于 2013-09-22T22:55:52.377 に答える
1

セットを正しく印刷しています。オブジェクトを希望どおりSignal.toString()に表現するメソッドを実装していないだけです。Signal

内のオブジェクトの更新についてTreeSet: の出力が変更されるような方法でオブジェクトを変更してはなりませんcompareTo。この方法で更新する必要がある場合は、削除して ( を使用してSet.remove(object)更新し、再度追加します。

つまり、compareTo()メソッドは常に 0 を返します。低い値arg0.occurence - occurenceよりも高い値を優先する場合は、0 を返す必要があります。occurenceこれは、0 未満の値を返すことthisは、引数の前に来ることを意味するためです。0 は順序が等しいことを意味し、> 1 はthis引数の後に来ることを意味します。

また、実装する場合compareTo()は、クラスの自然な順序を定義します。0 をequals()返すtrue場合にのみオーバーライドして返すことも強くお勧めします。 http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.htmlを参照してください)。の上記の実装では、これは両方が同じ値を持つ場合にのみ戻ることを意味します。このように equals を実装したくない場合 (おそらく正しくないでしょう)、実装するクラスを作成し、それをコンストラクターに渡す必要があります。compareTo()compareTo()trueoccurenceComparator<Signal>TreeSet

于 2013-09-22T22:46:58.533 に答える
1

あなたが探している行:

    while (it.hasNext()){
        Signal sig = (Signal)it.next();
        System.out.println(sig.getName());
        System.out.println(sig.getOccurance());
        // do the same with source or whatever property 
    }
于 2013-09-22T22:52:31.240 に答える