前面都是对基本数据类型的数据进行排序,如:冒泡排序,选择排序,插入排序。如何对引用类似的对象进行排序?
先封装一个Student类:
public class Student {
private int stuNo;
private String name;
private String gender;
private int age;
public Student(int stuNo, String name, String gender, int age) {
this.stuNo = stuNo;
this.name = name;
this.gender = gender;
this.age = age;
}
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
再写一个对象排序的封装类:
public class ObjectSort {
private Student[] arr;
private int cloum;
public ObjectSort(){
arr=new Student[10];
}
public ObjectSort(int cloum){
arr=new Student[cloum];
}
//插入对象
public void insert(Student stu){
arr[cloum]=stu;
cloum++;
}
//显示对象
public void display(){
for(int i=0;i<cloum;i++){
System.out.println("学号:"+arr[i].getStuNo()+",姓名:"+arr[i].getName()+
",性别:"+arr[i].getGender()+",年龄:"+arr[i].getAge());
}
}
//对象排序(通过学号)
public void sortByStuNO(){
int min=0;
for(int i=0;i<cloum-1;i++){
min=i;
int j;
for(j=i;j<cloum;j++){
if(arr[j].getStuNo() < arr[min].getStuNo()){
min=j;
}
}
Student temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
//对象排序(通过String 类型的姓名)
public void sortByName(){
int min;
Student temp;
for(int i=0;i<cloum-1;i++){
min=i;
for(int j=i;j<cloum;j++){
if(arr[j].getName().compareTo(arr[min].getName())<0){
min=j;
}
}
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
}
然后是测试类:
public class TestObjectSort {
public static void main(String[] args) {
ObjectSort arr=new ObjectSort();
Student stu1=new Student(101, "f张三", "男", 23);
Student stu2=new Student(211, "c李四", "女", 22);
Student stu3=new Student(402, "b王五", "男", 24);
Student stu4=new Student(123, "d赵六", "女", 26);
Student stu5=new Student(108, "a钱八", "男", 24);
Student stu6=new Student(306, "e孙九", "男", 29);
arr.insert(stu1);
arr.insert(stu2);
arr.insert(stu3);
arr.insert(stu4);
arr.insert(stu5);
arr.insert(stu6);
System.out.println("通过学号进行对象排序前:--------------");
arr.display();
System.out.println("通过学号进行对象排序后:--------------");
arr.sortByStuNO();
arr.display();
System.out.println("通过姓名比较进行对象排序后:------------");
arr.sortByName();
arr.display();
}
}
结果显示如下:
通过学号进行对象排序前:--------------
学号:101,姓名:f张三,性别:男,年龄:23
学号:211,姓名:c李四,性别:女,年龄:22
学号:402,姓名:b王五,性别:男,年龄:24
学号:123,姓名:d赵六,性别:女,年龄:26
学号:108,姓名:a钱八,性别:男,年龄:24
学号:306,姓名:e孙九,性别:男,年龄:29
通过学号进行对象排序后:--------------
学号:101,姓名:f张三,性别:男,年龄:23
学号:108,姓名:a钱八,性别:男,年龄:24
学号:123,姓名:d赵六,性别:女,年龄:26
学号:211,姓名:c李四,性别:女,年龄:22
学号:306,姓名:e孙九,性别:男,年龄:29
学号:402,姓名:b王五,性别:男,年龄:24
通过姓名比较进行对象排序后:------------
学号:108,姓名:a钱八,性别:男,年龄:24
学号:402,姓名:b王五,性别:男,年龄:24
学号:211,姓名:c李四,性别:女,年龄:22
学号:123,姓名:d赵六,性别:女,年龄:26
学号:306,姓名:e孙九,性别:男,年龄:29
学号:101,姓名:f张三,性别:男,年龄:23