2017-01-28 13 views
0

あなたの助けが必要です。 JavaのPriorityQeueuをソートしたいのであれば、その属性に接続しないで、hashCodeのObjectを使って比較できますか?hashCode()を使用して、Javaのオブジェクトをソートする.HashTableやectではなく

私はそれをしなかったか、この:

comp = new Comparator<Person>() { 

     @Override 
     public int compare(Person p1, Person p2) { 
      if(p1.hashCode() < p2.hashCode()) return 1; 
      if(p1.hashCode() == p2.hashCode()) return 0; 
      return -1; 
     } 
    }; 
collector = new PriorityQueue<Person>(comp); 

答えて

0

それは良いアプローチのような音はありません。 デフォルトでは、hashCode()はオブジェクトの内部アドレスを整数に変換することで実装されます。オブジェクトの順序はアプリケーションの実行によって異なります。 また、同じ属性値セットを持つ2つのオブジェクトは、実装をオーバーライドしない限り、同じhashCode値を返しません。これは実際にComparableの期待される契約を破る。

+0

他にも何か提案がありますか? – Yos

+0

http://stackoverflow.com/questions/9704554/sorting-arraylist-of-objects-using-hashcode 正しいComparatorを実装していない限り、PriorityQueueはソートされていないコレクションほど優れています。 これを明確にする。 hashCodeを使用すると、1つのアプリケーションインスタンス(JVM)内で一貫した順序が得られます。それは単に正しいアプローチではありません。 – bbb8989

関連する問題