JAVA 排序自定义类型元素集合

排序代码

public class Collection_sort3 {
    public static void main(String[] args) {
        List <Points>  list = new ArrayList<Points>();
        list.add(new Points(3,4));
        list.add(new Points(2,1));
        list.add(new Points(5,8));
        list.add(new Points(6,3));
        list.add(new Points(5,6));
        System.out.println(list);
        /**
         * sort方法要求排序的集合元素必须实现
         * Comparable 接口才可以排序。
         * 
         */
        Collections.sort(list);
        System.out.println(list);
    }
}

类的定义

public class Points implements Comparable<Points>{
    private int a;
    private int b;
    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    }
    public int getB() {
        return b;
    }
    public void setB(int b) {
        this.b = b;
    }
    public Points(int a, int b) {
        super();
        this.a = a;
        this.b = b;
    }
    public String toString(){
        return "("+a+","+b+")";
    }
    /**
     * 该方法是定义当前对象this,与给定对象o 之间的大小关系
     * 方法返回一个int 值。该值并不关心具体值,只关心取值范围
     * 当:
     * 返回值>0: 当前对象大于参数对象(this>o)
     *      <0:         小于      
     * 返回值=0: 俩个对象相等
     *
     */
    @Override
    public int compareTo(Points o) {
        int len=this.a*this.a+this.b*this.b;
        int olen =o.a*o.a+o.b+o.b;
        return len-olen;
    }
}

代码优化

import java.util.Comparator;

/**
 * Collection提供了一个重载的sort:
 * 该方法跟推荐使用,有俩优点:
 * 1 :不要求元素必须实现Comparable接口,减少对我们代码的侵入性
 * 2 :当元素已经实现了Comparable接口,如:String这样的类
 * 但是其提供的比较大小规则不满足我们对排序的需求时,
 * 也可以使用这个重载的sort方法解决。
 * 
 * 该重载的sort方法要求除了传入要排序的集合外,还要传入一个额外的比较器
 * ,使用它的比较集合元素。
 *
 */
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class Collrction_sort4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List <String> list = new ArrayList<String>();
        list.add("12555");
        list.add("123");
        list.add("1234");
        System.out.println(list);
        /**
         * 重载的sort不要求元素实现Comparable接口,若已经实现了也
         * 不会根据元素的比较大小规律排序
         */

        Collections.sort(list,new Comparator<String>(){
            public int compare(String o1,String o2){
                return o1.length()-o2.length();
            }
        });
        System.out.println(list);
    }

}

排序结果
这里写图片描述

猜你喜欢

转载自blog.csdn.net/LSummer_/article/details/80959647
今日推荐