您的位置:首页 > 编程语言 > Java开发

java类自定义实现类排序实现(Comparable或者额外类实现Comparator)

2017-12-09 09:53 302 查看
1.自身类实现Comparable接口,重写public int compareTo(Object obj) {}方法
0 相等   正数   this > obj   负数 this < obj
然后加入到集合中,使用Collections.sort(list);调用即可   
public class News implements Comparable {
    private Date date;
    private int number;
    private String title;
    
    public News() {}
    public News(String title,int number,Date date) {
        this.title = title;
        this.number = number;
        this.date = date;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getTitle(String title) {
        return this.title;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public int getNumber() {
        return this.number;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public Date getDate() {
        return this.date;
    }
    @Override
    public int compareTo(News news) {
        int result = 0;
        result = this.date.compareTo(news.date);
        //先按时间
        if(result == 0) {
            //点击量
            result = -(this.number - news.number);
            if(result == 0) {
                //标题
                result = -this.title.compareTo(news.title);
                if(result == 0) {
                    return result;
                } else {
                    return result;
                }
            } else {
                return result;
            }
        } else {
            return result;
        }
    }
    
    @Override
    public String toString() {
        return title + " " + number + " " + date;
    }
}

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List list = new ArrayList();
        list.add(new News("hj",100,new Date()));
        list.add(new News("za",60,new Date(System.currentTimeMillis() - 10000)));
        list.add(new News("lb",80,new Date(System.currentTimeMillis() + 10000)));
        System.out.println("排序前");
        for(News n : list) {
            System.out.println(n);
        }
        Collections.sort(list);
        System.out.println("排序后");
        for(News n : list) {
            System.out.println(n);
        }
    }

}
打印结果是:
排序前
hj 100 Fri Oct 27 09:25:32 CST 2017
za 60 Fri Oct 27 09:25:22 CST 2017
lb 80 Fri Oct 27 09:25:42 CST 2017
排序后
za 60 Fri Oct 27 09:25:22 CST 2017
hj 100 Fri Oct 27 09:25:32 CST 2017
lb 80 Fri Oct 27 09:25:42 CST 2017

2.使用额外的类来实现{}方法
好处:独立于实体类   便于应对各种规则
加入到集合中,用Collections.sort(list, new 比较类());
public class Goods {
    private String name;
    private int number;
    
    public Goods() {}
    public Goods(String name,int number) {
        this.name = name;
        this.number= number;
    }
    @Override
    public String toString() {
        return name + " " + number;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public int getNumber() {
        return this.number;
    }
}    

import java.util.Comparator;

public class SortGoods implements Comparator{
    @Override
    public int compare(Goods g1, Goods g2) {
        //先按销量降序
        int result = 0;
        result = -(g1.getNumber() - g2.getNumber());
        if(result == 0) {
            //再按标题    
            result = -g1.getName().compareTo(g2.getName());
        }
        return result;
    }
}

public class test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Goods("zj",80));
        list.add(new Goods("ajj",80));
        list.add(new Goods("hjj",80));
        list.add(new Goods("hjj",10));
        System.out.println("排序前");
        for(Goods g : list) {
            System.out.println(g);
        }
        Collections.sort(list,new SortGoods());
        System.out.println("排序后");
        for(Goods g : list) {
            System.out.println(g);
        }
    }
}

打印结果是:
排序前
zj 80
ajj 80
hjj 80
hjj 10
排序后
zj 80
hjj 80
ajj 80
hjj 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐