2016-10-31 16 views
1

C++のようにJavaで優先度キューを使用する方法がわかりません。 Cでは ++我々はこのようにそれを行うことができます。優先キューの比較 - java vs C++

priority_queue<object*, vector<object*>, compareClass> 

をだから我々はこのようなクラスを持っている場合:

class Foo{ 
public: 
    int number1; 
    int number2 
    Foo(){}; 
}; 

我々は2つだけにすることによって2人の異なる考え方によってそれらに比較するために、2つの異なるキューを使用することができますcompareClasses。 Javaで

私はこのようなキューを作成するとき、私は、問題の原因を得た:

PriorityQueue<Foo> pq = new PriorityQueue<Foo>(); 

私は一度だけのcompareTo機能を無効にすることができます。私はこのようなオーバーライド何か作ることができることを知っている :プログラムのこの場合の共犯で

class Foo implements Comparable<Foo>{ 
public int number1; 
public int number2; 

    @Override 
    public int compareTo(Foo other){ 
     if(number2 != // something) 
      return Int.compare(number, other.number); 
     else 
      return Int.compare(number2, other.number2); 
    } 
} 

は異なっています。 JavaでC++のようにすることはできますか?

+1

いいえ、類似したコード構造を持つことを試みる以外に、あなたは本当にC++のidomsをJavaに変換することはできません。どちらの言語も異なるイデオロギーを持っています。そして、あなたは、Javaの**ジェネリック**は[別のものである]ことを知っておくべきです(http://stackoverflow.com/questions/36347/what-are-the-differences-between-generic-types-in-c-and-java) C++の**テンプレート**から。 – WhiZTiM

答えて

3

Java PriorityQueueを作成するときは、Comparatorというコンストラクタを使用します。これにより、すでにクラスに対して定義されているcompareToメソッドがあるにもかかわらず、必要な比較ロジックを使用できます。

関連する問題