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が関係より小さい場合
を選択します.
例:
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]