java 对象排序

开发过程中,会遇到 对一个对象的序列进行排序。

java里面提供了Comparable、Comparator 接口

Comparable : public int compareTo(T o);
Comparator : int compareTo(T o1,T o2);
例子:
现在有一个类,有姓名、年龄两个属性,要求根据年龄排序



package cu.suning.min.demo.compareable;

import java.util.Comparator;

/**Comparable,数组排序
 * Comparator,list排序
 * @author 14051387
 *
 */
public class CompDemo implements Comparable<CompDemo> , Comparator<Object>{

	public String name;
	public int age;
	
	public CompDemo(){}
	
	public CompDemo(String name,int age){
		this.name = name;
		this.age = age;
	}
	// 数组排序
	@Override
	public int compareTo(CompDemo o) {
		if(this.age < o.getAge()){
			return -1;
		}else if(this.age > o.getAge()){
			return 1;
		}
		return 0;
	}
	// list排序用
	@Override
	public int compare(Object o1, Object o2) {
		CompDemo com1 = (CompDemo)o1;
		CompDemo com2 = (CompDemo)o2;
		if(com1.getAge() < com2.getAge()){
			return -1;
		}else if(com1.getAge() > com2.getAge()){
			return 1;
		}
		return 0;
	}
	
	public String toString(){
		return this.name+" , "+this.age; 
	}

	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;
	}
	
}

测试:

package cu.suning.min.demo.compareable;

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

public class JmainTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		CompDemo []com = new CompDemo[3]; 
		com[0] = new CompDemo("A", 47);
		com[1] = new CompDemo("B", 48); 
		com[2] = new CompDemo("C", 45); 
		
		List<CompDemo> lst = new ArrayList<CompDemo>();
		CompDemo comD = new CompDemo();
		for(CompDemo co : com){
			lst.add(co);
		}
		//******************************
		System.out.println("lst排序前:");
		System.out.println(lst);
		Collections.sort(lst, comD);
		System.out.println("lst排序后:");
		System.out.println(lst);
		// ***********************
		Arrays.sort(com);
		
		for(CompDemo co : com){
			System.out.println("排序后的数组:");
			System.out.println(co);
		}
	}

}


Java对象排序通常有以下几种实现方法: 1. **使用`Collections.sort()`排序对象列表**:该方法适用于实现了`Comparable`接口的集合。在使用时,需要提供一个比较器(`Comparator`)来定义对象排序逻辑。这种方式可以对列表中的对象进行排序,让编程更快捷 [^1][^2][^3]。 2. **使用`Arrays.sort()`排序对象数组**:此方法适用于基本类型数组和对象数组。同样,在对对象数组排序时,也需要提供合适的比较器来确定排序规则 [^2][^3]。 3. **使用Java 8+的`Stream API`排序**:借助`Stream API`可以以流式操作的方式对对象进行排序,这种方式提供了更简洁和灵活的排序操作 [^3]。 4. **实现`Comparable`接口**:为实现类提供了一种自然的排序方式,允许对该类的对象进行自动排序。像`Byte`、`Character`、`Long`等类都实现了`Comparable`接口,它们各自有对应的自然排序规则,如`Byte`是按有符号数值排序,`String`是按字典序排序等 [^4]。 以下是使用`Collections.sort()`和`Arrays.sort()`的代码示例: ```java import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } public class ObjectSortingExample { public static void main(String[] args) { // 使用Collections.sort()对象列表排序 List<Person> personList = new ArrayList<>(); personList.add(new Person("Alice", 25)); personList.add(new Person("Bob", 20)); personList.add(new Person("Charlie", 30)); // 使用匿名内部类创建比较器 Collections.sort(personList, new Comparator<Person>() { @Override public int compare(Person p1, Person p2) { return p1.getAge() - p2.getAge(); } }); System.out.println("Sorted person list by age: " + personList); // 使用Arrays.sort()对象数组排序 Person[] personArray = { new Person("David", 22), new Person("Eve", 27), new Person("Frank", 18) }; Arrays.sort(personArray, new Comparator<Person>() { @Override public int compare(Person p1, Person p2) { return p1.getName().compareTo(p2.getName()); } }); System.out.println("Sorted person array by name: " + Arrays.toString(personArray)); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值