利用Arrays排序的方法

利用java.util.Arrays提供的对数组操作方法可以对数组进行比较,排序和查找。

排序有两种方法:
1.实体类实现Comparable接口
2.通过构造比较器。(可以根据需要提供多个比较器来实现实体类的不同属性进行排序)


import java.util.Arrays;
import java.util.Comparator;

/**
* UserInfo类必须实现Comparable接口
* @author Ken
* @version 01/10/2010
*/
class UserInfo implements Comparable{

private String strName;
private String strSex;
private String strRole;
private int iAge;
private int iPay;

public UserInfo(String strName,String strSex,String strRole,int iAge,int iPay){

this.strName = strName;
this.strSex = strSex;
this.strRole = strRole;
this.iAge = iAge;
this.iPay = iPay;
}

public String getStrName() {
return strName;
}

public String getStrSex() {
return strSex;
}

public String getStrRole() {
return strRole;
}

public int getIAge() {
return iAge;
}

public int getIPay() {
return iPay;
}

/**
* 覆盖Comparable接口中的compareTo方法
* @param Object
* @return int
*/
public int compareTo(Object o){
if(((UserInfo) o).getIPay()>this.getIPay())
return 1;
if(((UserInfo) o).getIPay() return -1;
return 0;
}
}

/**
* 球员比较器1,按照球员年龄比较
*/
class Comparator1 implements Comparator{

public int compare(Object o1, Object o2) {
if(((UserInfo)o2).getIAge() > ((UserInfo) o1).getIAge())
return 1;
if(((UserInfo)o2).getIAge() < ((UserInfo) o1).getIAge())
return -1;
return 0;
}
}

/**
* 球员比较器2,按照球薪资比较
*/
class Comparator2 implements Comparator{

public int compare(Object o1, Object o2) {
if(((UserInfo)o2).getIPay() > ((UserInfo) o1).getIPay())
return 1;
if(((UserInfo)o2).getIPay() < ((UserInfo) o1).getIPay())
return -1;
return 0;
}
}

public class ArraySort {

/**
* 构造球员数组
*/
public UserInfo[] createUsers(){
UserInfo[] ui = new UserInfo[5];
ui[0] = new UserInfo("马拉多纳","男","中场",29,20000);
ui[1] = new UserInfo("坎通纳","男","中场",27,18000);
ui[2] = new UserInfo("罗马里奥","男","前锋",23,19500);
ui[3] = new UserInfo("古力特","男","中场",28,16000);
ui[4] = new UserInfo("巴斯滕","男","前锋",26,19000);

return ui;
}

/**
* 调用此方法通过实现Comparable接口比较
* @param ui
*/
public void sortDisplay(UserInfo[] ui){

//调用Arrays类的sort方法,实现排序
Arrays.sort(ui);

for(int i=0;i System.out.println(ui[i].getStrName()+ " " + ui[i].getStrSex() + " "
+ui[i].getStrRole() + " " + ui[i].getIAge() + " " + ui[i].getIPay());
}
}

/**
* 调用此方法通过比较器实现比较
* @param ui
* @param comp
*/
public void sortDisplay(UserInfo[] ui,Comparator comp){

//调用Arrays类的sort方法
Arrays.sort(ui,comp);

for(int i=0;i System.out.println(ui[i].getStrName()+ " " + ui[i].getStrSex() + " "
+ui[i].getStrRole() + " " + ui[i].getIAge() + " " + ui[i].getIPay());
}
}

public static void main(String[] args){
ArraySort as = new ArraySort();

System.out.println("1.通过实现Comparable接口实现排序:");
as.sortDisplay(as.createUsers());

System.out.println("\n\n2.通过Comparator比较器实现排序:");
System.out.println("按照球员年龄排序:");
as.sortDisplay(as.createUsers(),new Comparator1());
System.out.println("\n按照球员薪资排序:");
as.sortDisplay(as.createUsers(), new Comparator2());
}
}



输出结果为:

[color=green]1.通过实现Comparable接口实现排序:
马拉多纳 男 中场 29 20000
罗马里奥 男 前锋 23 19500
巴斯滕 男 前锋 26 19000
坎通纳 男 中场 27 18000
古力特 男 中场 28 16000


2.通过Comparator比较器实现排序:
按照球员年龄排序:
马拉多纳 男 中场 29 20000
古力特 男 中场 28 16000
坎通纳 男 中场 27 18000
巴斯滕 男 前锋 26 19000
罗马里奥 男 前锋 23 19500

按照球员薪资排序:
马拉多纳 男 中场 29 20000
罗马里奥 男 前锋 23 19500
巴斯滕 男 前锋 26 19000
坎通纳 男 中场 27 18000
古力特 男 中场 28 16000[/color]

你可能感兴趣的:(java基础)