简单明了两种对象列表排序方法

方法:
第一种:实体对象实现Comparble接口,复写comparTo方法。
第二种:实体对象不需要改动,直接在调用排序的地方重写Collections.sort方法。

第一种:
实体对象Dog.java:

public class Dog implement<Dog> {
	String name;
	int age;
	public Dog(String name,int age){
		this.name = name;
		this.age = age;
	}
	/**
	*实现方法
	*@return 当前对象的年龄减去其他对象年龄的差
	*/
	@Override
	public int compareTo(Dog o){
		return this.age - o.age;
	}
}

使用方法举例TestRealizeImplements.java:

public class TestRealizeImplements {
	public void testSort(){
		//初始化用于测试的数据
		List<Dog> dogList = new ArrayList<>();
		Dog dog1 = new Dog("狗1号",10);
		Dog dog2 = new Dog("狗2号",15);
		Dog dog3 = new Dog("狗1号",12);
		dogList.add(dog1);
		dogList.add(dog2);
		dogList.add(dog3);
		 //排序
		 Collections.sort(dogList);
		 //排序后的结果
		 for(Dog dog : dogList){
		 	System.out.println(dog.name+":"+dog.age);
		 }
	}
	public static void main(String[] args){
		TestRealizeImplements t = new TestRealizeImplements();
		t.testSort();
	}
}

简单来说就是实体类中的实现方法是重要的,在实现方法里写比较的逻辑
return值小的排在前面,如果比较条件不是int类型的,那就自行比较,然后让符合你需求的逻辑返回小的数值,不符合的返回大的数即可。

第二种方法:重写Collections.sort方法:
实体类Dog.java:

就是上面的dog类,去掉实现接口,去掉实现方法,变成一个基本的实体类

使用举例Test:

public class TestReWriteMethod {
	public void testSort(){
		//初始化用于测试的数据
		List<Dog> dogList = new ArrayList<>();
		Dog dog1 = new Dog("狗1号",10);
		Dog dog2 = new Dog("狗2号",15);
		Dog dog3 = new Dog("狗1号",12);
		dogList.add(dog1);
		dogList.add(dog2);
		dogList.add(dog3);
		 //排序
		 Collections.sort(dogList,new Comparator<Dog>(){
			@Override
			public int compare(Dog o1,Dog o2){
				return o1.age - o2.age;
			}
		})
		 //排序后的结果
		 for(Dog dog : dogList){
		 	System.out.println(dog.name+":"+dog.age);
		 }
	}
	public static void main(String[] args){
		TestReWriteMethod t = new TestReWriteMethod();
		t.testSort();
	}
}

简单来说就是第二种方法,相当于将第一种方法中实体的实现方法,移动到第二种方法的复写方法中去了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值