0

私の問題は次のようなものです:

私はTestQクラスを持っています

class TestQ{
 public void main(String[] args){
    PriorityQueue<Request> requestQ = new PriorityQueue<Request>(5, new SortRequest());
    //...
 }
}

私のRequestクラスには、ゲッターとセッターに加えて 2 つのフィールドがあります。

int siteId;
int timestamp;

そしてSortRequestクラスはこのようなものです

class SortRequest implements Comparator<Request>{
   public int compare(Request r1, Request r2) {
       return r1.getTimeStamp()-r2.getTimeStamp();
   }
}

TestQクラスでは、siteId と Timestamp のユーザー入力を取得しています制約は、siteId は一意である必要がありますが、タイムスタンプは同じでも異なっていてもかまいません。(たとえば、5 つのサイトの siteId は 1,2,3,4,5 です)。

タイムスタンプ値に基づいてリクエスト キューを並べ替えているためです。また、2 つ以上のサイトのタイムスタンプが等しい場合は、PriorityQueue が siteId に従って並べ替えて、低い siteId が高いサイトよりも優先されるようにする必要があります。私は期待されていません。助けてください。ありがとう。

4

2 に答える 2

0

あなたのコンパレータはこのようにする必要があります

class SortRequest implements Comparator<Request>{
   public int compare(Request r1, Request r2) {
      if(r1.getTimeStamp()!=r2.getTimeStamp())
         return new Integer(r1.getTimeStamp()).compareTo(r2.getTimeStamp());
      if(r1.getSiteId()!=r2.getSiteId())
         return new Integer(r1.getSiteId()).compareTo(r2.getSiteId());
      return 0;      
   }
}
于 2013-10-24T18:44:31.097 に答える