JavaのComprableとCompratorの違いと使用シーン
19936 ワード
Comprableの位置:java.lang.cmparable;
Compratorの位置:java.util.comprator;
Collections.sort()とArays.sort()の方法はObject配列を並べ替えることができますが、この方法は対象のクラスがComprableインターフェースを実現しなければなりません。このインターフェースは並べ替え規則を指定するために使います。
Comprableは、オブジェクト自体が比較に必要なインターフェース(String、Integer自体が比較サイズの操作ができるように、Comprableインターフェースが実現されました)をサポートしています。
Compratorを使うのは戦略モードです。対象自体を変えずに戦略対象を変えることです。
Compratorの位置:java.util.comprator;
Collections.sort()とArays.sort()の方法はObject配列を並べ替えることができますが、この方法は対象のクラスがComprableインターフェースを実現しなければなりません。このインターフェースは並べ替え規則を指定するために使います。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class HDTV implements Comparable<HDTV> {
private int size;
private String brand;
public HDTV(int size, String brand) {
this.size = size;
this.brand = brand;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public int compareTo(HDTV tv) {
if (this.getSize() > tv.getSize())
return 1;
else if (this.getSize() < tv.getSize())
return -1;
else
return 0;
}
public static void main(String[] args) {
HDTV tv1 = new HDTV(55, "Samsung");
HDTV tv2 = new HDTV(60, "Sony");
HDTV tv3 = new HDTV(35, "Apple");
List<HDTV> list = new ArrayList<HDTV>();
list.add(tv1);list.add(tv2);list.add(tv3);
Collections.sort(list);
for (HDTV tv : list) {
System.out.println(tv.getSize()+"---"+tv.getBrand());
}
}
一つのクラスがすでに開発されていますが、このような初期にはComprableインターフェースが実現されていません。この時は対象の並べ替え操作ができないに違いないです。この問題を解決するために、javaはもう一つのコンパレータの操作インターフェース、Compratorを定義しています。import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class HDTV {
private int size;
private String brand;
public HDTV(int size, String brand) {
this.size = size;
this.brand = brand;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
class SizeComparator implements Comparator<HDTV> {
@Override
public int compare(HDTV tv1, HDTV tv2) {
int tv1Size = tv1.getSize();
int tv2Size = tv2.getSize();
if (tv1Size > tv2Size) {
return 1;
} else if (tv1Size < tv2Size) {
return -1;
} else {
return 0;
}
}
}
public class Main {
public static void main(String[] args) {
HDTV tv1 = new HDTV(55, "Samsung");
HDTV tv2 = new HDTV(60, "Sony");
HDTV tv3 = new HDTV(42, "Panasonic");
ArrayList<HDTV> al = new ArrayList<HDTV>();
al.add(tv1);
al.add(tv2);
al.add(tv3);
Collections.sort(al, new SizeComparator());
for (HDTV a : al) {
System.out.println(a.getBrand());
}
}
まとめ:Comprableは、オブジェクト自体が比較に必要なインターフェース(String、Integer自体が比較サイズの操作ができるように、Comprableインターフェースが実現されました)をサポートしています。
Compratorを使うのは戦略モードです。対象自体を変えずに戦略対象を変えることです。