在集合或者数组中,有时候需要对里面的元素,也就是对象进行排序,依照对象的某个或者某几个属性从大到小或者从小到大进行排序,我们可以采用直接编码的方式,将集合或者数组中的元素进行重新排列,但,采用java本身提供的接口,无疑是一种更有效的方法。
java提供两种方式来提供比较功能。第一种是实现java.lang.Comparable接口,它有一个 int compareTo(Object o)方法,重写此方法即可。
package compare;
public class People implements Comparable {
private int id;
private String name;
public People(int id,String name){
this.id=id;
this.name=name;
}
/*
* 这里表示按id从小到大排序,如果该对象小于、等于或大于指定对象Object o,则分别返回负整数、零或正整数
* 如果需要从大到小排序,则如果该对象小于、等于或大于指定对象Object o,则分别返回正整数、零或负整数
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Object o) {
People people=(People)o;
if(id<people.getId()){
return -1;
}
if(id>people.getId()){
return 1;
}
return 0;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试代码如下:
List peopleList = new ArrayList();
peopleList.add(new People(2, "张三"));
peopleList.add(new People(1, "李四"));
peopleList.add(new People(0, "王五"));
System.out.println("排序前");
for (int i = 0; i < peopleList.size(); i++) {
People people = (People) peopleList.get(i);
System.out.println(people.getId() + " " + people.getName());
}
Collections.sort(peopleList);
System.out.println("排序后");
for (int i = 0; i < peopleList.size(); i++) {
People people = (People) peopleList.get(i);
System.out.println(people.getId() + " " + people.getName());
}
以下是输出结果:
排序前
2 张三
1 李四
0 王五
排序后
0 王五
1 李四
2 张三
另一种方式是实现java.util.Comparator接口,重写int compare(Object o1, Object o2)方法即可。
package compare;
import java.util.Comparator;
public class Compare implements Comparator {
/*
* 这里表示按id从小到大排序,如果该对象o1小于、等于或大于指定对象o2,则分别返回负整数、零或正整数
* 如果需要从大到小排序,则如果对象o1小于、等于或大于指定对象o2,则分别返回正整数、零或负整数
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare(Object o1, Object o2) {
Student s1=(Student)o1;
Student s2=(Student)o2;
if(s1.getId()<s2.getId()){
return -1;
}
if(s1.getId()>s2.getId()){
return 1;
}
return 0;
}
}
Student类代码如下:
package compare;
public class Student {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试代码如下:
List<Student> list = new ArrayList<Student>();
Student s1 = new Student(1, "a");
Student s2 = new Student(2, "b");
Student s3 = new Student(3, "c");
list.add(s3);
list.add(s2);
list.add(s1);
System.out.println("排序前");
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println(s.getId() + " " + s.getName());
}
Collections.sort(list, new Compare());
System.out.println("排序后");
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println(s.getId() + " " + s.getName());
}
结果如下:
排序前
3 c
2 b
1 a
排序后
1 a
2 b
3 c
结果和预期是相同的。
这两种方法都可以实现按照对象的属性进行排序,或者自己定义排序规则,不过个人更倾向于使用第二种方式,因为这种方式对JavaBean不进行任何的修改,而且扩展起来也很方便
分享到:
相关推荐
简略辨析JVM内存结构、Java内存模型、Java对象模型三个概念的异同 说明Java内存模型概念和核心内容 针对重排序说一说重排序的例子,重排序的好处 着重说一说可见性,说一说JVM内存的抽象、hanpens
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript;&ajax;...
71.5. Hibernate 中Java对象的状态 58 71.5.1. 临时状态 (transient) 58 71.5.2. 持久化状态(persisted) 58 71.5.3. 游离状态(detached) 58 71.5.4. hibernate的三种状态之间如何转换 59 71.6. Hibernate并发机制,...
java面试试题 全面 准确 带答案 coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 ...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...
基本类型数据使用快速排序法,对象数组使用归并排序。 String,StringBuffer和StringBuilder的区别; 解答: Object的方法有哪些:比如有wait方法,为什么会有; 解答: wait和sleep的区别,必须理解!!! 解答: 强...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...
用JAVA实现一个快速排序。 86 11、有数组a[n],用java代码将数组元素顺序颠倒 87 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 88 三. html&JavaScript;&ajax;...
用JAVA实现一个快速排序。 13 52. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 13 53. 一个".java"源文件中是否可以包括多个类(不是内部类)?有...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript;&ajax;...
用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript;&...