2018-07-25期 Java排序编程小案例

1、Student类

package cn.sjq.sort.java;

/**

* 通过实现Java的Comparable<T>接口来对Student对象进行排序

* 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法

* 实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。

* @author songjq

*

*/

public class Student1 implements Comparable<Student1> {

// 定义student对象属性

private String stuNo;

private String stuName;

private int stuAge;

private float stuMath;

public String getStuNo() {

return stuNo;

}

public void setStuNo(String stuNo) {

this.stuNo = stuNo;

}

public String getStuName() {

return stuName;

}

public void setStuName(String stuName) {

this.stuName = stuName;

}

public int getStuAge() {

return stuAge;

}

public void setStuAge(int stuAge) {

this.stuAge = stuAge;

}

public float getStuMath() {

return stuMath;

}

public void setStuMath(float stuMath) {

this.stuMath = stuMath;

}

public Student1() {

}

public Student1(String stuNo, String stuName, int stuAge, float stuMath) {

this.stuNo = stuNo;

this.stuName = stuName;

this.stuAge = stuAge;

this.stuMath = stuMath;

}

/*

* 重新Student对象toString()方法

* (non-Javadoc)

* @see java.lang.Object#toString()

*/

@Override

public String toString() {

return "["+this.stuNo+"\t"+this.stuName+"\t"+this.stuAge+"\t"+this.stuMath+"]";

}

/*

* 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

*  参数: o - 要比较的对象。

*  返回:

* 负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。

* 抛出: ClassCastException -

* 如果指定对象的类型不允许它与此对象进行比较。 (non-Javadoc)

*

* @see java.lang.Comparable#compareTo(java.lang.Object)

*/

@Override

public int compareTo(Student1 o) {

//这里根据Math大小进行降序排序

if(this.stuMath<o.getStuMath()) {

return 1;

}else if(this.stuMath == o.getStuMath()) {

return 0;

}else {

return -1;

}

}

}

2、JavaSortDemoMain类

package cn.sjq.sort.java;

import java.util.Arrays;

/**

* 对Student对象集合排序

* @author songjq

*

*/

public class JavaSortDemoMain {

public static void main(String[] args) {

// 实例化Student对象

Student1 s1 = new Student1("STU000001", "Zhang", 19, 89.12f);

Student1 s2 = new Student1("STU000005", "Lisi", 18, 84.12f);

Student1 s3 = new Student1("STU000004", "Wanger", 22, 81.22f);

Student1 s4 = new Student1("STU000003", "Mazi", 21, 95.13f);

Student1 s5 = new Student1("STU000002", "Zhaowu", 17, 86.12f);

/*

// 方式1:将student对象封装到数据,Student对象没有实现Comparable<T>接口

Student[] stuArray = { s1, s2, s3, s4, s5 };

//对stuArray排序

Arrays.sort(stuArray);

// 输出stuArray对象集合

System.out.println("************** Arrays.sort(stuArray)  ********************");

for(Student stu:stuArray) {

System.out.println(stu);

}

*/

/**

* 运行结果:

* Student对象没有实现Comparable<T>接口情况下,执行报cn.sjq.sort.java.Student cannot be cast to java.lang.Comparable

* 说明如果要使用Arrays.sort(stuArray)或者Collections.sort(stuArray)对对象进行排序,需要实现Comparable<T>接口

*/

// 方式2:将student对象封装到数据,Student对象实现Comparable<T>接口

Student1[] stuArray = { s1, s2, s3, s4, s5 };

//对stuArray排序

Arrays.sort(stuArray);

// 输出stuArray对象集合

System.out.println("************** Arrays.sort(stuArray)  ********************");

for(Student1 stu:stuArray) {

System.out.println(stu);

}

/**

* 运行结果:

* [STU000003 Mazi 21 95.13]

[STU000001 Zhang 19 89.12]

[STU000002 Zhaowu 17 86.12]

[STU000005 Lisi 18 84.12]

[STU000004 Wanger 22 81.22]

从运行结果可以看出,确实是按照stuMath字段按照降序进行了排序

*/

}

}


猜你喜欢

转载自blog.51cto.com/2951890/2150809