【Java】Java中的利用List实现数组排序

重点内容
-compareTo与compare方法的区别
-List数组实现不限定的多个类对象添加
-Collections.sort排序的使用


易混淆的两个方法区别:
1、compareTo(T o)方法是java.lang.Comparable接口中的方法。当需要对某个类的对象进行【排序】时,该类需要实现Comparable接口的,必须重写public int compareTo(T o)方法。比如:MapReduce中Map函数和Reduce函数处理的 <key,value>,其中需要根据key对键值对进行排序,所以,key实现了WritableComparable接口,实现这个接口可同时用于序列化和反序列化。WritableComparable接口(用于序列化和反序列化)是Writable接口和Comparable接口的组合。(注:T为类名)
2、compare(Object o1,Object o2)方法是java.util.Comparator接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。


接下来我们看看具体方法的实现:
1、Student类:包含学号、姓名和年龄属性;
2、定义一个学生数组,存放若干个学生对象,然后对数组中的对象,按学生年龄从小到大排序。

代码块

首先,写一个Student类,例如:

public  class Student implements Comparable<Student>
{
     public String No;
     public String Name;
     public int   Age;
     public Student(String No,String Name,int Age)
     {
    	 this.No=No;
    	 this.Name=Name;
    	 this.Age=Age;	 
     }
    // Getters and Setters
	public String getNo() 
	{
		return No;
	}
	public void setNo(String no)
	{
		this.No = no;
	}
	public String getName() 
	{
		return Name;
	}
	public void setName(String name)
	{
		this.Name = name;
	}
	public int getAge()
	{
		return Age;
	}
	public void setAge(int age) 
	{
		this.Age = age;
	}
    //compareTo父类的重写
	@Override
	public int compareTo(Student o) 
	{
		 if(this ==o) return 0;  
	     else if (o!=null && o instanceof Student) 
	     {   
	    	 Student u = (Student) o; 
	         if(Age<=u.Age) 
	        	 return -1;
	         else           
	        	 return 1;
	        
	     }
	     else return -1;
	    
	}
	//字符串输出,toString方法父类的重写
	@Override
	public String toString()
	{
		return getNo()+" "+getName()+" "+getAge();
	}
}

接下来写一个测试类Main:

public class Main {
	public static void main(String[] args) {
		List<Student> stu=new ArrayList<>();
		stu.add(new Student("001","张三",20));
		stu.add(new Student("002","李四",25));
		stu.add(new Student("003","王明",29));
		stu.add(new Student("004","吴梦",24));
		Collections.sort(stu,COMPARATOR);
		System.out.println("排序后名单输出为:");
		System.out.println(stu);
	}
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值