本帖最后由 Без_тебя 于 2014-6-13 18:05 编辑
学完comparator,这里写了一个自定义类实现comparator接口,实现了compare方法,并且排序方法封装入一个SortUtil工具类中,可以随时用SortUtil来排序 comparator 和comparable不同在于,comparable是让类实现comparable接口,实现compareTo方法来比较,
而comparator则是让一个 类(比较器)实现comparator接口,实现其中的compare方法,来比较两个元素的大小,之后可以用自定义的工具类来实现比较功能,或者用Java自带的collection.sort也能实现
两者相比,comparator更具有灵活性,适用于各种需要经常变更排序方法的情况
package demo3;
/***自定义类实现Comparator接口,并实现了compare的方法
*
*.
import java.util.Comparator;
public class MyComparator <T> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
// TODO Auto-generated method stub
String str1 = o1.toString();
String str2 = o2.toString();
return str1.compareTo(str2);
}
}
import java.util.Comparator;
import java.util.List;
/**
* 自定义一个工具类SortUtil,把在里面实现数组可以通过compator来冒泡排,可以识别List、数组
*
*/
public class SortUtil {
//把在里面实现数组可以通过compator来冒泡排序,这边适用List
public static <T> List<T> sort(List<T> arr,Comparator<T> com){
for(int i=0;i<arr.size();i++){
for(int j=0;j<arr.size()-1;j++){
if(com.compare(arr.get(j),arr.get(j+1))>0){
T temp = arr.get(j);
arr.set(j, arr.get(j+1));
arr.set(j+1, temp);
}
}
}
return arr;
}
//把在里面实现数组可以通过compator来冒泡排序,这边适用数组
public static <T> T[] sort(T[] arr,Comparator<T> com){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-1;j++){
if(com.compare(arr[j], arr[j+1])>0){
T temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
*有两种方法排序,一种用我们自己定义的MyComparator的Sort
*二是用Collection的自带接口,Collection.Sort();
*/
public class demo3 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
MyComparator<String> com = new MyComparator<String>();
list.add("hhhhhhhhh");
list.add("ccccc");
list.add("aaaaa");
list.add("bbbbb");
//第一种
//SortUtil.sort(list,com);
//第二种
Collections.sort(list);
System.out.println(list);
}
}
|
|