List集合排序

这篇博客记录了2019年5月20日关于List集合排序的需求,主要讨论了当集合包含基本数据类型、包装数据类型以及自定义对象时的排序方法。针对自定义对象,博客详细解释了如何按照一个或两个属性进行升序和降序排序,并指出Integer、String等已实现Comparable接口,可以直接进行比较。文中鼓励读者将示例代码运行以加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019年5月20日记

需求:对一个集合排序,集合中存放的是自定义对象。按照自定义对象的2个属性排序【小–>大】【大–>小】

亲,把程序粘贴到本地,跑起来。想怎么盘它,就怎么盘它。2分钟就明了啦

1、List中是基本数据类型or包装数据类型
   public static void main(String[] args) {  
        List<Integer> nums = new ArrayList<Integer>();  
            nums.add(3);  
            nums.add(5);  
            nums.add(1);  
            nums.add(0);  
            System.out.println(nums);  
            Collections.sort(nums);  
            System.out.println(nums);  
    }

输出结果:
[3, 5, 1, 0][0, 1, 3, 5]

2、自定义对象按照1个属性or 2个属性排序
import java.util.Date;
/**
 * 因为要实现对ConsumInfo对象的排序,所以在ConsunInfo类中要实现Comparable接口,也就是要实现compareTo()方法
 * 具体的比较参照:依次按照price、uid进行顺序排序
 * @author breeze
 *
 */
public class ConsumInfo implements Comparable<ConsumInfo> {
    private Integer uid;
    private String name;
    private Double price;
    private Date datetime;
    
    public ConsumInfo() {
    }
    
    public ConsumInfo(int uid,String name,double price,Date datetime){
        this.uid = uid;
        this.name = name;
        this.price = price;
        this.datetime = datetime;
                
    }
    
    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Date getDatetime() {
        return datetime;
    }

    public void setDatetime(Date datetime) {
        this.datetime = datetime;
    }
    

    @Override
    public String toString() {
        return "ConsumInfo [uid=" + uid + ", name=" + name + ", price=" + price
                + ", datetime=" + datetime + "]";
    }
    @Override
    public int compareTo(ConsumInfo o) {
    
        //首先比较price,如果price相同,则比较uid 
        int num = price.compareTo(o.price); //从小到大
       	if(num==0){ //如果price值相等,则比较uid属性,同样是从小到大
       		num = uid.compareTo(o.uid);    //num = o.uid.compareTo(uid); 从大到小
       	}
        return num;
    }   
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

public class ConsumInfoTest {
    
    public static void main(String[] args) {
        
        ConsumInfo consumInfo1 = new ConsumInfo(100, "consumInfo1", 400.0,new Date());
        ConsumInfo consumInfo2 = new ConsumInfo(200, "consumInfo1", 200.0,new Date());
        ConsumInfo consumInfo3 = new ConsumInfo(300, "consumInfo1", 100.0,new Date());
        ConsumInfo consumInfo4 = new ConsumInfo(400, "consumInfo1", 700.0,new Date());
        ConsumInfo consumInfo5 = new ConsumInfo(500, "consumInfo1", 800.0,new Date());
        ConsumInfo consumInfo6 = new ConsumInfo(600, "consumInfo1", 300.0,new Date());
        ConsumInfo consumInfo7 = new ConsumInfo(700, "consumInfo1", 900.0,new Date());
        ConsumInfo consumInfo8 = new ConsumInfo(800, "consumInfo1", 400.0,new Date());
        
        List<ConsumInfo> list = new ArrayList<ConsumInfo>();
        list.add(consumInfo1);
        list.add(consumInfo2);
        list.add(consumInfo3);
        list.add(consumInfo4);
        list.add(consumInfo5);
        list.add(consumInfo6);
        list.add(consumInfo7);
        list.add(consumInfo8);
        System.out.println("排序前:");
        //排序前
        for(ConsumInfo consumInfo : list ){
            System.out.println(consumInfo);
        }
        
        Collections.sort(list);//排序,必须的有这一行
        System.out.println("排序后:");
        //排序后
        for(ConsumInfo consumInfo :list){
            System.out.println(consumInfo);
        }
    }
}

在这里插入图片描述
解释:【Integer,String,Double等】均已实现了Comparable接口,所以封装类型可以直接使用。
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
参数: o - 要比较的对象。
返回:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
若为基本类型,效果同样。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值