エンティティが大きさを比較する方法をカスタマイズすることが等しい分析して2つのオブジェクトが完全に等しいかどうかを決定します

固体部分によって決定されるかまたはそれに等しい大きさ比較器を属性

1.分析に等しいカスタムエンティティの例

A)オーバーライドのhashCode()とequals()メソッド2

b)の具体例:

1  クラスのStu {
 2      プライベート文字列名= NULL ;
3      プライベート int型の年齢= 0 ;
4      
5      公共ステュ(文字列名、int型の年齢){
 6           .nameの= 名前。
7          この .age = 年齢;
8      }
 9      // 覆写オブジェクト中的にメソッドに等しい
10個の     公共 ブール等しい(オブジェクトobj){
 11          であればこの ==のOBJ){
 12              リターン 13         }
 14          であれば((OBJ!instanceofの{ステュ))
 15              リターン 16          }
 17          のStu STU = (ステュ)OBJ。
18          であれば((stu.age ==  .age)&& この.name.equals(stu.name)){
 19              リターン 20          }
 21          リターン 22      }
 23      // 方法的ハッシュコード中覆写オブジェクト
24      公共 int型のハッシュコード(){
 25          リターン この.name.hashCode()* この.age。
26      }
 27 }

 

2.エンティティのインスタンスのサイズを比較するいくつかのプロパティ(1つ以上のフィールド)

1)Comparableインタフェースを実装するカスタムクラスを作ります

同等のインターフェースとのcompareTo()メソッドをオーバーライドする実装は、のcompareTo()メソッドをソートする方法を示しています。

2)ソートモードのコンパレータを指定します

比較器及び受信方法は、正の整数を返す場合と比較(オブジェクトO1は、オブジェクトO2)被験者インスタンスのメソッド、およびサイズ比較O1とO2が、より大きい前記O1とO2を書き換え、0を返す場合、それらが戻った場合は、同じであることを示しますO1とO2未満陰性整数。

      私は同等インターフェース、特に実施例Aを実装します。

1つの パブリック クラスの製品は、実装匹敵{
 2      プライベート文字列名を、
3      プライベート ダブル価格。
4つの  
5      パブリック製品(){
 6      }
 7つの  
8      公共財(文字列名、二重価格){
 9          この .nameの= 名前。
10          この .price = 価格。
11      }
 12   
13      公共の文字列のgetName(){
 14          リターン名。
15      }
 16  
17      公共の ボイドのsetName(文字列名){
 18          この .nameの= 名前。
19      }
 20   
21      公共 ダブルgetPrice(){
 22          リターン価格。
23      }
 24   
25      公共 ボイド setPrice(二重価格){
 26          この .price = 価格。
27      }
 28   
29      @Override
 30      パブリック文字列のtoString(){
 31          リターン "商品{"は、+
 32                 "NAME =" '+名+' \ '' +
 33である                  "価格=" + +価格。
 34が                  ''} ;
 35      }
 36   
37      // 方法の指定された商品比較、ローからハイへの価格によると、存在している場合次いで、製品名によってローからハイにソートし、同じ価格、
38である     @Override
 39      公共 のint のcompareTo(物体O){
 40          IF(O instanceofの商品){
 41である              商品商品= (財)O;
 42は、             IFこの .price> 商品.price){
 43は                 リターン 1 ;
 44れる              } さもなければ IFこの .price < goods.price){
 45                  リターン   -1 ;
 46である              } さもなければ
47                  // 0を返す
48                  リターン この.name.compareTo(goods.name);
 49          }
 50          新しい新規のRuntimeException(「着信データを型の不一致" );
 51      }
 52 }

 

    II。着信コンパレータインタフェース、具体例B

1     @Test
 2     公共 ボイドTEST2(){
 3件の 
4         商品[] ARR = 製品[5 ]。
5つの         ARR [0] = 製品( "lenovoMouse"、34 );
6つの         ARR [1] = 製品( "dellMouse"、66 );
7つの         ARR [2] = 製品( "xiaomiMouse"、50 );
8つの         ARR [3] = 製品( "hahaMouse"、66 );
9つの         ARR [4] = 製品( "hahaMouse"、166 )。
10  
11         は、Arrays.sort(ARR、新しい新しいコンパレータ(){
 12れ 
13がされて             // ローからハイにソートされた製品名によると、道の商品比較を指定して、低価格でソートされた
14             @Override
 15             公共 のint {(O1、O2オブジェクトオブジェクト)の比較
 16  
。17                IF(O1 instanceofの   製品O2 && のinstanceof グッズ){
 18である 
19の。                    グッズG1 = (財)01;
 20は、                    用品G2は= (財)O2;
 21は、                   IF (g1.getName()に等しい(g2.getName())){
 22であります                       リターン - Double.compare(g1.getPrice()、g2.getPrice());
 23です                    }{
 24                        リターンg1.getName()のcompareTo(g2.getName());.
 25                    }
 26である               }
 27                  新しい新規のRuntimeException( "データ型入力と矛盾" );
 28             }
 29         });
 30  
31である        のSystem.out.println (Arrays.toString(ARR)から);
 32  
33は        / * 
34のれる        実行結果:
 35         [商品{NAME = 'dellMouse' ,.価格= 66.0}、{商品名= 'hahaMouse'}価格= 166.0。
 36の         製品名= { 'hahaMouse' ,.価格= 66.0}、{商品名= 'lenovoMouse'}。価格= 34.0、
 37 [         商品{NAME = 'xiaomiMouse'、価格= 50.0}]
 38          * / 
39  
40     }

 

インタフェースコンパレータと比較例3)比較可能なインターフェース

同等のインターフェースは、一度任意の位置に実装されたオブジェクト・クラス同等のインターフェースは、サイズを比較することができることを保証する、方法を指定します。

 

コンパレータインターフェイスは比較的一時的な性質です。

 

参考データ:

1. 2つのオブジェクトが完全に等しいかどうかを判断する方法

2. 比較のサイズでのJavaの2つの実装

おすすめ

転載: www.cnblogs.com/bridgestone29-08/p/11258457.html
おすすめ