Java:对象排序
来源:互联网 发布:长春玛雅软件培训 编辑:程序博客网 时间:2024/06/07 05:12
需求
在实际项目开发中,我们经常会遇到需要通过 Java 对象的某一属性对其进行排序的需求。于是查找了相关资料,发现实现起来并不复杂,可以使用 Java 本身提供的两种接口来实现,接口如下:
- java.lang.Comparable
- java.util.Comparator
实现
java.lang.Comparable 接口
java.lang.Comparable 接口有一个 compareTo(Object o) 方法,我们只需要重写此方法即可。代码如下:
public class People implements Comparable<People> { private String name; private int 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; } /* * 根据 age 做比较,如果该对象小于 people,返回 -1;等于 people,返回 0;大于 people,返回 1。 */ @Override public int compareTo(People people) { if(age < people.getAge()){ return -1; } if(age > people.getAge()){ return 1; } return 0; }} 测试代码:public class Test { public static void main(String[] args) { People xz = new People(); xz.setName("小张"); xz.setAge(20); People xl = new People(); xl.setName("小李"); xl.setAge(23); People xw = new People(); xw.setName("小王"); xw.setAge(18); People xc = new People(); xc.setName("小陈"); xc.setAge(18); List<People> peoples = new ArrayList<People>(); peoples.add(xz); peoples.add(xl); peoples.add(xw); peoples.add(xc); System.out.println("排序前:"); for (People people : peoples) { System.out.println("name = " + people.getName() + " age = " + people.getAge()); } // 排序 Collections.sort(peoples); System.out.println("排序后:"); for (People people : peoples) { System.out.println("name = " + people.getName() + " age = " + people.getAge()); } }}输出结果:排序前:name = 小张 age = 20name = 小李 age = 23name = 小王 age = 18name = 小陈 age = 18排序后:name = 小王 age = 18name = 小陈 age = 18name = 小张 age = 20name = 小李 age = 23
java.util.Comparator 接口
java.util.Comparator 接口有一个 compare(Object o1, Object o2) 方法,我们只需要重写此方法即可。代码如下:
public class People { private String name; private int 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; }}public class PeopleCompare implements Comparator<People> { /* * 根据 age 做比较,如果 p1 小于 p2,返回 -1;等于 p2,返回 0;大于 p2,返回 1。 */ @Override public int compare(People p1, People p2) { if (p1.getAge() < p2.getAge()) { return -1; } if (p1.getAge() > p2.getAge()) { return 1; } return 0; }}测试代码:public class Test { public static void main(String[] args) { .... Collections.sort(peoples, new PeopleCompare());//只有这里不一样,其他代码同上 ....}输出结果:排序前:name = 小张 age = 20name = 小李 age = 23name = 小王 age = 18name = 小陈 age = 18排序后:name = 小王 age = 18name = 小陈 age = 18name = 小张 age = 20name = 小李 age = 23
结论
这两种方法都可以实现按照对象的属性进行排序,但是方法二相对于方法一来说更为符合 OOP 的设计原则。因为方法二不修改 JavaBean,且方便扩展。
0 0
- java 对象排序
- java 对象排序
- Java集合对象排序
- java对象排序
- java对象排序
- JAVA对象的排序
- java排序对象实现
- java对象数组排序
- Java集合对象排序
- Java集合对象排序
- java对象排序
- Java集合对象排序
- Java集合对象排序
- java 对象 排序
- Java对象排序
- Java对象的排序
- Java对象数组排序
- Java对象排序
- 人生的真相是什么???
- “分布式哈希”和“一致性哈希”
- 感悟
- 深入理解Linux网络技术内幕——设备的注册与初始化(二)
- LeetCode OJ 之 Scramble String
- Java:对象排序
- keil 图标和功能不符 解决办法
- random_shuffle
- 13.1.1 异步工作流为什么重要?
- abstract class和interface有什么区别
- 天声人語 20150208
- JSTL fmt标签的使用
- 有效检查Java代码的三个工具
- 日经春秋 20150208