1. 程式人生 > >2018-07-25期 Java排序編程小案例

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

字段 err this ast 返回 compare 屬性 12px 封裝

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字段按照降序進行了排序

*/

}

}


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