java集合属性定义_Java 集合自定义对象属性排序

对自定义的对象属性进行排序,一般是实现Comparable接口或实现Comparator接口

1. Comparable与Comparator接口的区别

参数

Comparable

Comparator

排序逻辑

排序逻辑必须在待排序对象的类(pojo类)中

排序逻辑单独实现

实现

pojo类实现Comparable接口

自定义Comparator接口

排序方法

int compareTo(Object o1)

int compare(Object o1, Object o2)

触发排序

Collections.sort(List)

Collections.sort(List, Comparator)

接口所在包

java.lang.Comparable

java.util.Comparator

巧记两个接口:

Comparator:-tor结尾,类似doctor一样代表一个人,可以想象为是一个独立的排序接口个体,因为是个比较器个体,所以需要单独书写,单独调用;

Comparable:-able结尾,able代表xxx能力,描述自身具有的一种能力,是自身自带排序,所以不需要单独写但是要嵌入Bean中,使得Bean具有排序能力

2. 实现***Comparator***接口

package CollectionKnowledge;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

/**

* 集合自定义属性升序排序示例

* @author sunlh

*

*/

public class ComparatorSort {

public static void main(String[] args) {

List list = new ArrayList<>();

UserBean user1 = new UserBean("2", "张三", "男", 23);

UserBean user2 = new UserBean("4", "李四", "男", 24);

UserBean user3 = new UserBean("3", "王五", "男", 25);

UserBean user4 = new UserBean("1", "马六", "男", 26);

list.add(user1);

list.add(user2);

list.add(user3);

list.add(user4);

System.out.println("排序前数据");

for (UserBean userBean : list)

System.out.println(userBean.toString());

System.out.println("排序后数据");

// 调用排序方法,进行排序

ComparatorSort.sortById(list);

for (UserBean userBean : list)

System.out.println(userBean.toString());

}

/**

* 按照集合id升序排序

* @param list

*/

public static void sortById(List list) {

Collections.sort(list, new Comparator() {

@Override

public int compare(UserBean u1, UserBean u2) {

String id1 = u1.getId();

String id2 = u2.getId();

return id1.compareToIgnoreCase(id2);// 忽略大小写进行升序排序

}

});

}

}

/**

* 用户pojo

* @author sunlh

*

*/

class UserBean{

private String id;

private String name;

private String sex;

private int age;

public UserBean(String id, String name, String sex, int age) {

this.id = id;

this.name = name;

this.sex = sex;

this.age = age;

}

public UserBean() {

}

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 String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "UserBean [id=" + id + ", name=" + name + ", sex=" + sex

+ ", age=" + age + "]";

}

}

输出结果:

排序前数据

UserBean [id=2, name=张三, sex=男, age=23]

UserBean [id=4, name=李四, sex=男, age=24]

UserBean [id=3, name=王五, sex=男, age=25]

UserBean [id=1, name=马六, sex=男, age=26]

排序后数据

UserBean [id=1, name=马六, sex=男, age=26]

UserBean [id=2, name=张三, sex=男, age=23]

UserBean [id=3, name=王五, sex=男, age=25]

UserBean [id=4, name=李四, sex=男, age=24]

3. 实现***Comparable***接口

package CollectionKnowledge;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class ComparableSort {

public static void main(String[] args) {

List list = new ArrayList<>();

UserBean2 user1 = new UserBean2("2", "张三", "男", 23);

UserBean2 user2 = new UserBean2("4", "李四", "男", 24);

UserBean2 user3 = new UserBean2("3", "王五", "男", 25);

UserBean2 user4 = new UserBean2("1", "马六", "男", 26);

list.add(user1);

list.add(user2);

list.add(user3);

list.add(user4);

System.out.println("排序前数据");

for (UserBean2 userBean2 : list)

System.out.println(userBean2.toString());

System.out.println("排序后数据");

Collections.sort(list);

for (UserBean2 userBean2 : list)

System.out.println(userBean2.toString());

}

}

/**

* 用户pojo

* @author sunlh

*

*/

class UserBean2 implements Comparable{

private String id;

private String name;

private String sex;

private int age;

public UserBean2(String id, String name, String sex, int age) {

this.id = id;

this.name = name;

this.sex = sex;

this.age = age;

}

public UserBean2() {

}

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 String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "UserBean [id=" + id + ", name=" + name + ", sex=" + sex

+ ", age=" + age + "]";

}

@Override

public int compareTo(UserBean2 o) {

return this.id.compareToIgnoreCase(o.getId());

}

}

输出结果(同上面一样):

排序前数据

UserBean [id=2, name=张三, sex=男, age=23]

UserBean [id=4, name=李四, sex=男, age=24]

UserBean [id=3, name=王五, sex=男, age=25]

UserBean [id=1, name=马六, sex=男, age=26]

排序后数据

UserBean [id=1, name=马六, sex=男, age=26]

UserBean [id=2, name=张三, sex=男, age=23]

UserBean [id=3, name=王五, sex=男, age=25]

UserBean [id=4, name=李四, sex=男, age=24]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值