Collections.sort的两种用法

1.List中的对象实现Comparable接口:

public class User implements Comparable<User> {
	private String name;
	private Integer order;

	public String getName() {
		return name;
	}

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

	public Integer getOrder() {
		return order;
	}

	public void setOrder(Integer order) {
		this.order = order;
	}

	public int compareTo(User arg0) {
		return this.getOrder().compareTo(arg0.getOrder());
	}

}

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

public class Test {

	public static void main(String[] args) {
		User user1 = new User();
		user1.setName("a");
		user1.setOrder(1);
		User user2 = new User();
		user2.setName("b");
		user2.setOrder(2);

		List<User> list = new ArrayList<User>();
		// 此处add user2再add user1
		list.add(user2);
		list.add(user1);

		Collections.sort(list);
		for (User u : list) {
			System.out.println(u.getName());
		}
	}
}
2.使用静态内部类实现Comparator接口

import java.util.*;

public class test {
	public static void main(String args[]) {
		ArrayList<Student> al = new ArrayList<Student>();
		al.add(new Student(2, "aa"));
		al.add(new Student(1, "bb"));
		al.add(new Student(3, "dd"));
		al.add(new Student(3, "cc"));
		Collections.sort(al, new StudentComparator());
		Iterator<Student> it = al.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
			/****
			 *  id=1,name=bb
				id=2,name=aa
				id=3,name=cc
				id=3,name=dd
			 */
		}
	}
}

class Student {
	int id;
	String name;
	
	Student(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public String toString() {
		return "id=" + this.id + ",name=" + this.name;
	}
}

class StudentComparator implements Comparator<Student> {
	//先比较int id id相同后再比较String name
	public int compare(Student o1, Student o2) {
		Student s1 = (Student) o1;
		Student s2 = (Student) o2;
		int result = (s1.id > s2.id) ? 1 : ((s1.id == s2.id) ? 0 : -1);
		if (0 == result) {
			result = s1.name.compareTo(s2.name);
		}
		return result;
	}
}
补充 比较字符串类型的数字

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

public class test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("4");
		list.add("8");
		list.add("9");
		list.add("19");

		//Collections.sort(list);// [19, 4, 8, 9] 错误

		Collections.sort(list, new Comparator<String>() {
			// [4, 8, 9, 19]
			@Override
			public int compare(String o1, String o2) {
				if (Integer.parseInt(o1) > Integer.parseInt(o1)) {
					return -1;
				}
				return 1;
			}
		});
		System.err.println(list);// [19, 4, 8, 9]		
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值