用Collections 对List集合进行排序(两种方法)

本文介绍两种使用Java对List集合中的Person对象进行排序的方法。一种是通过实现Comparable接口并重写compareTo方法,另一种是使用Comparator接口自定义排序规则。示例代码展示了如何按年龄和身高对Person对象列表进行排序。

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

用Collections 对List集合进行排序,规则自定义,要求List集合中放入Person对象
方法一:实现Comparable这个接口,重写compareTo()这个方法
Person类代码:

package xes.wangxiao.qa;
public class Person implements Comparable<Person>{
	private String name;
	private int age;
	private int height;
	private float weight;
		
	//默认构造方法
	public Person() {
	}
	//带姓名和年龄的构造方法
	public Person(String name,int age,int height){
		this.name=name;
		this.age=age;
		this.height=height;
	}	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height=height;
	}
	@Override
	public int compareTo(Person o) {
		Integer age1=this.getAge();
		Integer age2=o.getAge();
		if(age1.compareTo(age2)==0) {
			Integer height1=this.getHeight();
			Integer height2=o.getHeight();
			return height1.compareTo(height2);	
		}else {
			return age1.compareTo(age2);
		}
	}
}

主代码:

package xes.wangxiao.qa;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class testList {
	public static void main(String[] args) {
		Person niuniu=new Person("牛牛", 18,175);
		Person benben=new Person("犇犇", 20,173);
		Person kankan=new Person("衎衎", 2,110);
		Person honghong=new Person("红红", 30,181);
		Person qiangqiang=new Person("强强", 30,175);
		List<Person> person=new ArrayList<Person>();
		person.add(niuniu);
		person.add(benben);
		person.add(kankan);
		person.add(honghong);
		person.add(qiangqiang);
		Collections.sort(person);
		for(Person p:person) {
			System.out.println(p.getName()+":"+p.getAge());
		}
	}
}

方法二:
Person类代码:

package xes.wangxiao.qa;
public class Person{
	private String name;
	private int age;
	private int height;
	private float weight;		
	//默认构造方法
	public Person() {
	}
	//带姓名和年龄的构造方法
	public Person(String name,int age,int height){
		this.name=name;
		this.age=age;
		this.height=height;
	}	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height=height;
	}
}

主代码:

package xes.wangxiao.qa;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class testList1 {
	public static void main(String[] args) {
		Person niuniu=new Person("牛牛", 18,175);
		Person benben=new Person("犇犇", 20,173);
		Person kankan=new Person("衎衎", 2,110);
		Person honghong=new Person("红红", 30,181);
		Person qiangqiang=new Person("强强", 30,175);
		List<Person> person=new ArrayList<Person>();
		person.add(niuniu);
		person.add(benben);
		person.add(kankan);
		person.add(honghong);
		person.add(qiangqiang);
		sort(person);
		for(Person p:person) {
			System.out.println(p.getName()+":"+p.getAge());
		}
	}
	
	public static void sort(List<Person> list) {
		Collections.sort(list, new Comparator<Person>() {
			@Override
			public int compare(Person p1,Person p2) {
				Integer age1=p1.getAge();
				Integer age2=p2.getAge();
				if(age1.compareTo(age2)==0) {
					Integer height1=p1.getHeight();
					Integer height2=p2.getHeight();
					return height1.compareTo(height2);					
				}else {
					return age1.compareTo(age2);
				}
			}			
		});		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值