Collection中List,Set的排序

排序分为两种

1.        自然排序:自定义类需实现Comparable接口,依据CompareTo方法,确定按照哪一个或哪几个属性排序,如果返回值为0,则表示两个自定义对象相同,(如果需要降序,就在CompareTo的返回值前面加一个“-”号)。【如果可以操作一个类,就用自然排序】

2.        定制排序:实现Comparator接口,在重写compare方法时指明按照自定义类的哪个属性排序,并生成一个对象;【如果不可以操作一个类,就用定制排序】

两种排序都要使用Collections.sort()来排序。

基本用法如下:

list升序,降序,逆序 

List<Integer>list =new ArrayList<Integer>(); 
//如果list是 5 7 2 6 8 1 4 
1、升序: 
Collections.sort(list) //list: 1 2 4 5 6 7 8 
2、降序: 
Collections.sort(list,Collections.reverseOrder())//list:8 7 6 5 4 2 1

3、逆序:

Collections.reverse(list)//list:4 1 8 6 2 7 5

数组升序,降序 
int[] a={5 7 2 6 8 1 4} 
1、升序: 
Arrays.sort(a)//a: 1 2 4 5 6 7 8

2、降序: 
Arrays.sort(a,Collections.reverseOrder())//a: 8 7 6 5 4 2 1

补充: 
Arrays.asList(数组)//将数组转成list 
Arrays.asList(a); 
List<Integer>list =new ArrayList<Integer>(Arrays.asList(a));

例子

Collections使用sort(List) 根据元素的自然顺序对指定List 集合元素按升序排序;

Collections使用 sort(List,Comparator) 根据指定的Comparator 产生的顺序对 List 集合元素进行排序。

使用sort(List)

@Test
	public void test1(){ //排序操作
		List ls=new ArrayList();
		ls.add(82);
		ls.add(93);
		ls.add(34);
		ls.add(25);
		ls.add(46);
		ls.add(27);
		
		Collections.sort(ls);
		for(Object o:ls)
			System.out.println(o);
		}

使用 sort(List,Comparator)

Customer类

public class Customer {
	String id;
	String name;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Customer() {
		super();
	}
	public Customer(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + "]";
	}
}

测试类,实现Comparator接口实现排序

	@Test
	public void testOrder(){
		List lps=new ArrayList<Customer>();
		for(Integer i=0;i<10;i++){
			lps.add(new Customer(i.toString(),i+"name"));
		}
		Collections.sort(lps,new Comparator<Customer>() {
			@Override
			public int compare(Customer c1, Customer c2) {
				//升序
				return c1.getName().compareTo(c2.getName());
				//降序
				//return c2.getName().compareTo(c1.getName());
			}
		});
		Iterator is = lps.iterator();
		while(is.hasNext()){
			System.out.println(is.next());
		}
	}

使用sort(List)并在类中实现Comparable接口

Person类

public class Person implements Comparable{
	String name;
	Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Deprecated
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", getName()=" + getName() + ", getAge()=" + getAge()
				+ ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
				+ "]";
	}
	public Person() {
		super();
	}

	@Override
	public int compareTo(Object o) {
		if(o instanceof Person){
			Person p=(Person) o;
			int i=this.name.compareTo(p.name);
			if(i==0){
				i=this.age.compareTo(p.age);
				return i;
			}else{
				return i;
			}
		}
		return 0;
	}
}

测试类

	@Test
	public void testOrder2(){
		List lps=new ArrayList<Person>();
		for(Integer i=0;i<10;i++){
			lps.add(new Person(i+"name",i*10+i));
		}
		Collections.sort(lps);
		Iterator is = lps.iterator();
		while(is.hasNext()){
			System.out.println(is.next());
		}
	}

Set类的使用和List一样。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值