2018-07-25期 Java排序編程小案例
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字段按照降序進行了排序
*/
}
}
2018-07-25期 Java排序編程小案例