对象排序Comparator与Comparable

当集合中存储的都是对象时,我们要对其进行排序,就要借助于Comparator或Comparable,以简单的方式实现对象排序或自定义排序。

例子:一个对象类:

Comparable的实现:对象类实现Comparable接口的compareTo方法


package com.chj.comparator;
public class User implements Comparable<User> {
private String username;
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public int compareTo(User o) {
if (this.getAge() > o.getAge()) {
return 1;
} else if (this.getAge() < o.getAge()) {
return -1;
}
return 0;
}
}


Comparator的实现:创建一个比较器


package com.chj.comparator;
import java.util.Comparator;
public class MyCompatator implements Comparator<User>{
@Override
public int compare(User o1, User o2) {
if (o1.getAge() < o2.getAge()) {
return 1;
} else if (o1.getAge() > o2.getAge()) {
return -1;
}
return 0;
}
}




测试:


package com.chj;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import com.chj.comparator.MyCompatator;
import com.chj.comparator.User;


public class TestObjectSort {
public List<User> getUsers() {
List<User> list = new ArrayList<User>();
User u = new User();
u.setAge(2);
u.setUsername("derek2");
list.add(u);


u = new User();
u.setAge(1);
u.setUsername("derek1");
list.add(u);


u = new User();
u.setAge(4);
u.setUsername("derek4");
list.add(u);


u = new User();
u.setAge(3);
u.setUsername("derek3");
list.add(u);


return list;
}
public void print(List<User> list) {
for (User user : list) {
System.out.println(user.getAge() + " --- " + user.getUsername());
}
}
@Test
public void testComparator() {
List<User> list = getUsers();
print(list);
System.out.println("-------------------------------------------------");
Collections.sort(list);
print(list);
}
@Test
public void testComparable() {
List<User> list = getUsers();
print(list);
System.out.println("-------------------------------------------------");
Collections.sort(list,new MyCompatator());
print(list);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值