匹敵するとコンパレータは、仕分けシーン解析を実施し比較します

 

ソースコード解析 - Collections.sort()

       A、Collection.sort使用

        Collections.sort():メソッドは、そう、あなたが比較してソートすることができます確保するよう、コンパレータ<T>を継承する、着信Collections.sort(の要素タイプ)の最初のセットの正種類のセットです。

       

 

 

     ソースコードの解析によると、達成するために、主に2つの方法があります。

     (1)従来のタイプおよび他のタイプの文字列のソート

     (このような時、価格、年齢ソートなど)JavaBeanのプロパティの(2)ソートします

   ユースケース:

リストの<string> listOne =は、Arrays.asList( "3"、 "2"、 "5"、 "8" )。
        Collections.sort(listOne)。// 默认升序 
        するSystem.out.println( "listOne =" + listOne)。

        / ** 
         *输出结果:
         * listOne = [2、3、5、8] 
         * /

二、リストのJavaBeanの一種のCollections.sort

   基本となるアルゴリズムは、実際のようには、Arrays.sort、は、Arrays.sort利用マージソート、クイック・ドレインの最適化、timSortを実行し、配列のセットに変換されます。

   2、データのソート文字列型

    ソースコードの文字列解析。

      

 

 

    文字列型の実装しているので同等の<string>インターフェイス、ソートCollections.sort(ソートされていない)を使用することができます。

  一覧<文字列>ソートされていない= 新しいのArrayList <文字列> (); 
  Collections.sort(ソートされていません)。// 文字列实现了匹敵接口

  注:カスタムのJavaBeanのためには、それが直接使用されていない、実装されていませんが、コンパレータが実装されてもよいです。

一つの方法:

Collections.sort(ソートされていない、新しいコンパレータ<unSortedBean> (){ 
            @Override 
            公共 のint 比較(unSortedBean arg0に、unSortedBean ARG1){
                 // 升叙
                戻り arg0.getOrder() - arg1.getOrder(); 
            } 
        })。
        

第二の方法

     またCollections.sort()を使用することができ、モードのみインターフェースを実装するJavaBeanとのcompareTo()メソッドによって同等昇順または降順を達成します。

インポートしたjava.io.Serializable; 

パブリック クラス unSortedBean 実装シリアライズ匹敵<unSortedBean> { 

    プライベート 静的 最終 長いのserialVersionUID = 1L 
    
    プライベート文字列名;
    プライベート文字列の年齢;
    プライベート int型の順。
    パブリック文字列のgetName(){
         戻り名。
    } 
    公共 ボイドのsetName(文字列名){
         この .nameの= 名前。
    } 
    パブリック文字列getAge(){
         リターン年齢; 
    } 
    公共 ボイドsetAge(文字列の年齢){
         この .age = 年齢。
    } 
    
    公共 のint getOrder(){
         戻り順序。
    } 
    公共 ボイド setOrder(INTの順){
         この .ORDER = ため、
    } 
    @Override 
    公共 のint のcompareTo(unSortedBean arg0に){
         // TODO升叙
        戻り 、この .order- arg0.getOrder()。
    } 
    

}
注:場合順序は、文字列型の番号がデジタル方式に変換して比較する必要があるか、または予想されるように比較結果がないかもしれません。

三、匹敵するとコンパレータの違い

1匹敵インタフェースのため、クラスは直接比較対象の必要性が同等のインタフェースを実装属する、インターフェースの実装クラスは、自然な順序を与え、そしてその唯一の天然ため、コンパレータコンパレータインタフェースは、比較対象が所属されていますクラスは、直接比較は単独でこのインタフェースを実装するクラスを作成することができ、インターフェイスを実装していない、コンパレータの比較対象として、クラスに対して、複数の比較器を実現することができます。

2、コンパレータがnullと比較することを選択でき、そして比較することはできません。比較器は、比較のパラメータが比較されているので、主な方法と比較メソッドは、オブジェクトがヌル(null.compareTo(OBJ))である匹敵する方法は、オブジェクトを呼び出す必要のcompareTo、異常であろう。
 

キー:同等<T>とコンパレータ<T>テストケース:参照リンクアドレス

 

おすすめ

転載: www.cnblogs.com/2019wxw/p/12217316.html