ComparableインタフェースおよびComparatorインタフェースの簡単な使用
4095 ワード
ソート操作を行うには、ソートルールを指定する必要があります.Arraysのsort()メソッドは、基本タイプがソートルールを指定しているため、デフォルトでは基本データ型をソートします.
オブジェクトタイプがソートされると、クラスはComparableインタフェースを実装してソートルールを決定します.
Comparableインタフェースは、2つの同類オブジェクトの比較のルールを作成するために使用されます.
Comparableインタフェースの定義:
public interface Comparable{
public int compareTo( T o);
}
Comparableインタフェースは汎用型を採用しており、このインタフェースには1つの方法compareTo(T o)しかなく、この方法はint型のデータを返し、1が関係より大きい場合、-1が関係より小さい場合
を選択します.
例:
出力結果:
印刷ソート前の場合[農業,7971.53,石炭,6916.95,石油,8343.34]印刷ソート後の場合[石炭,6916.95,農業,7971.53,石油,8343.34]
Arraysを利用しています.sort()メソッドのソートでは、すべてのオブジェクトがComparableインタフェースに変換され、基本データ型とSting型が実装されているので、直接ソートできます.
‘
Comparatorインタフェース
クラスを開発する際にComparableインタフェースが実現するが、クラスのアプリケーションでそのクラスのオブジェクトをソートする必要がある場合はjavaを利用する.utilパッケージのComparatorインタフェースは
救済策.Comparatorインタフェースは2つのオブジェクトの比較を実現するために使用され、このインタフェースには1つの方法comparare(T o 1,T o 2)しかない.ソートを行う場合は、インタフェースのインスタンスをコンパレータとして作成する必要があります.
Comparatorインタフェースの定義:
例:
印刷ソート前の場合[農業,7971.53,石炭,6916.95,石油,8343.34]印刷ソート後の場合[石炭,6916.95,農業,7971.53,石油,8343.34]
オブジェクトタイプがソートされると、クラスはComparableインタフェースを実装してソートルールを決定します.
Comparableインタフェースは、2つの同類オブジェクトの比較のルールを作成するために使用されます.
Comparableインタフェースの定義:
public interface Comparable
public int compareTo( T o);
}
Comparableインタフェースは汎用型を採用しており、このインタフェースには1つの方法compareTo(T o)しかなく、この方法はint型のデータを返し、1が関係より大きい場合、-1が関係より小さい場合
を選択します.
例:
package com.demo;
import java.util.Arrays;
class EnergyConsumption implements Comparable<EnergyConsumption>{
public static String standtard = " ";
private String department;
private double consumption;
public EnergyConsumption(String department, double consumption){
this.department = department;
this.consumption = consumption;
}
@Override
public int compareTo(EnergyConsumption ec) { // ,
if(this.consumption>ec.consumption)
return 1; // return -1
else if(this.consumption < ec.consumption)
return -1; // return 1,
else
return 0;
}
public String toString(){
return "
" + department + "," + consumption;
}
}
public class demo {
public static void main(String[] args) {
EnergyConsumption ec1 = new EnergyConsumption(" ", 7971.53);
EnergyConsumption ec2 = new EnergyConsumption(" ", 6916.95);
EnergyConsumption ec3 = new EnergyConsumption(" ", 8343.34);
EnergyConsumption[] ec = {ec1, ec2, ec3};
System.out.println(" ");
System.out.println(Arrays.toString(ec));
Arrays.sort(ec);
System.out.println(" ");
System.out.println(Arrays.toString(ec));
}
}
出力結果:
印刷ソート前の場合[農業,7971.53,石炭,6916.95,石油,8343.34]印刷ソート後の場合[石炭,6916.95,農業,7971.53,石油,8343.34]
Arraysを利用しています.sort()メソッドのソートでは、すべてのオブジェクトがComparableインタフェースに変換され、基本データ型とSting型が実装されているので、直接ソートできます.
‘
Comparatorインタフェース
クラスを開発する際にComparableインタフェースが実現するが、クラスのアプリケーションでそのクラスのオブジェクトをソートする必要がある場合はjavaを利用する.utilパッケージのComparatorインタフェースは
救済策.Comparatorインタフェースは2つのオブジェクトの比較を実現するために使用され、このインタフェースには1つの方法comparare(T o 1,T o 2)しかない.ソートを行う場合は、インタフェースのインスタンスをコンパレータとして作成する必要があります.
Comparatorインタフェースの定義:
public interface Comparator<T>{
public int compare(T o1, T o2);
}
例:
package com.demo;
import java.util.Arrays;
import java.util.Comparator;
class EnergyConsumption {
public static String standtard = " ";
private String department;
private double consumption;
public EnergyConsumption(String department, double consumption){
this.department = department;
this.consumption = consumption;
}
public double getConsumption(){
return consumption;
}
public String toString(){
return "
" + department + "," + consumption;
}
}
/*
* , comparator
*/
class EnergyConsumptionComparator implements Comparator<EnergyConsumption>{
@Override
public int compare(EnergyConsumption o1, EnergyConsumption o2) {
if(o1 == o2)
return 0;
else if(o1.getConsumption() > o2.getConsumption())
return 1;
else if(o1.getConsumption() < o2.getConsumption())
return -1;
else
return 0;
}
}
public class demo {
public static void main(String[] args) {
EnergyConsumption ec1 = new EnergyConsumption(" ", 7971.53);
EnergyConsumption ec2 = new EnergyConsumption(" ", 6916.95);
EnergyConsumption ec3 = new EnergyConsumption(" ", 8343.34);
EnergyConsumption[] ec = {ec1, ec2, ec3};
System.out.println(" ");
System.out.println(Arrays.toString(ec));
// , Comparator
Arrays.sort(ec, new EnergyConsumptionComparator());
System.out.println(" ");
System.out.println(Arrays.toString(ec));
}
}
出力結果:印刷ソート前の場合[農業,7971.53,石炭,6916.95,石油,8343.34]印刷ソート後の場合[石炭,6916.95,農業,7971.53,石油,8343.34]