Comparator自定义排序的使用

java对于集合的自定义排序方法有:

Arrays.sort(T[],Comparator<? super T> c);
Collections.sort(List<T> list,Comparator<? super T> c);

这里记录下对Comparator的自己理解。

Demo代码如下:

1.实体类代码:
class SortObj {

        String letter;
        int num;

        public SortObj(String letter, int num) {
            this.letter = letter;
            this.num = num;
        }

    }


2.Comparator的实现代码,两个类分别为:
/**
     * 字符排序(#排于最后)
     */
    class StrComparator implements Comparator<SortObj> {

        @Override
        public int compare(SortObj o1, SortObj o2) {
            if("#".equals(o1.letter) && "#".equals(o2.letter)){
                return 0;
            }else if("#".equals(o1.letter)){
                return 1;
            }else if("#".equals(o2.letter)){
                return -1;
            }
            return o1.letter.compareTo(o2.letter);

        }
    }

    /**
     * 数字排序 (升序)
     */
    class NumComparator implements Comparator<SortObj> {

        @Override
        public int compare(SortObj o1, SortObj o2) {

            if(o1.num > o2.num){
                return 1;
            }else if(o1.num < o2.num){
                return -1;
            }else{
                return 0;
            }
        }
    }

3.调用排序并展示:
findViewById(R.id.btn_num_sort).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Collections.sort(dataNum, new NumComparator());
                printInfo(dataNum);
            }
        });

        findViewById(R.id.btn_str_sort).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Collections.sort(dataStr, new StrComparator());
                printInfo(dataStr);
            }
        });

显示结果如下:
数字排序:
SortTest: (b,1) (r,2) (a,2) (a,3) (#,4) (#,5)
字符排序:
SortTest: (a,3) (a,2) (b,1) (r,2) (#,4) (#,5)


排序算法在compare中执行:
返回结果为3种:正整数(1),负整数(-1),0

自己对返回结果的理解( 纯属自己的看法):
这个有点冒泡排序的意思,当为正整数时,交换o1与o2的位置,当为负整数时,不换位置

猜你喜欢

转载自l540151663.iteye.com/blog/2373778
今日推荐