黑马程序员技术交流社区

标题: 关于comparator的技巧笔记 [打印本页]

作者: Без_тебя    时间: 2014-6-13 03:31
标题: 关于comparator的技巧笔记
本帖最后由 Без_тебя 于 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);
               
               
               
               
        }
}



作者: ender    时间: 2014-6-13 08:03
学习了    不错  顶起   
作者: 小乖乖灬浩歌    时间: 2014-6-13 17:38
大神 你的标题里面 compartor --->comparator
作者: 马宁    时间: 2014-6-13 20:00
围观下。。。
作者: 风吹落叶    时间: 2014-6-14 09:31
学习 学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2