java中使用库函数排序,递增,递减,对于数组,对于List集合排序。对于基本数据类型外的对象类型排序。 主要方法: Arrays.sort(array); Collections.sort(list); Arrays.sort(nameArray,Comparator); Collections.sort(list,Comparator);
1. 对于数组–Arrays.sort(array)
递增排序 Arrays.sort(strArray );
int[] intArray = new int[] {2, 1, 3, -2}; Arrays.sort(intArray); for(int i = 0;i<intArray.length;i++){ System.out.print(intArray[i]+" "); } 运行结果:-2 1 2 3 ---------- String[] strArray = new String[] {"x","a","B"}; Arrays.sort(strArray ); for(int i = 0;i<strArray .length;i++){ System.out.print(strArray[i]+" "); } 运行结果:B a x递减排序 Arrays.sort(intArray,Comparator.reverseOrder());
int[] intArray = new int[] {2, 1, 3, -2}; Arrays.sort(intArray,Comparator.reverseOrder()); for(int i = 0;i<intArray.length;i++){ System.out.print(intArray[i]+" "); } 运行结果: 3 2 1 -2 ---------- String[] strArray = new String[] {"x","a","B"}; Arrays.sort(strArray,Comparator.reverseOrder() ); for(int i = 0;i<strArray .length;i++){ System.out.print(strArray[i]+" "); } 运行结果:x a B对于String类型的,不区分大小写排序: Arrays.sort(strArray,String.CASE_INSENSITIVE_ORDER);
String[] strArray = new String[] {"x","a","B"}; Arrays.sort(strArray,String.CASE_INSENSITIVE_ORDER); for(int i = 0;i<strArray .length;i++){ System.out.print(strArray[i]+" "); } 运行结果:a B x2.对于List –Collections.sort(list)
递增顺序 Collections.sort(list);
LinkedList list = new LinkedList(); list.add(2); list.add(3); list.add(1); list.add(-2); Collections.sort(list); System.out.println(list.toString()); 运行结果:-2 1 2 3递减顺序 Collections.sort(list,Collections.reverseOrder());
LinkedList list = new LinkedList(); list.add(2); list.add(3); list.add(1); list.add(-2); Collections.sort(list,Collections.reverseOrder()); System.out.println(list.toString()); 运行结果: 3 2 1 -2对于String类型,同样适用。
3. 对于对象数组–使用Comparator接口
区别与上面的基本数据类型(int,char等),对于对象的排序就要用到自定义的Comparable接口了。以比较名字为例。 先比较姓,再比较名,按字典序递增排序 第一种写法:将实例类实现Comparable接口,重写compareTo(Object o)方法。 lastName.compareTo(o.lastName)的返回值有等于0,大于0,小于0三种情况。 如果等于0,则lastName字符串与o.lastName的字符串相同 如果大于0,则astName字符串大于o.lastName的字符串 如果小于0,则astName字符串小于o.lastName的字符串
class Name implements Comparable<Name>{ public String firstName,lastName; public Name(String firstName,String lastName){ this.firstName=firstName; this.lastName=lastName; } public int compareTo(Name o) { //实现接口 int lastCmp=lastName.compareTo(o.lastName); return (lastCmp!=0?lastCmp:firstName.compareTo(o.firstName)); } public String toString(){ //便于输出测试 return firstName+" "+lastName; } }测试类:
public static void main(String[] args) { Name nameArray[] = { new Name("John", "Lennon"), new Name("Karl", "Marx"), new Name("Groucho", "Marx"), new Name("Oscar", "Grouch") }; Arrays.sort(nameArray); for(int i=0;i<nameArray.length;i++){ System.out.println(nameArray[i].toString()); } } 运行结果: Oscar Grouch John Lennon Groucho Marx Karl Marx第二种写法: 实例类不用实现Comparable接口,而在排序的时候,需要写Comparator 接口。 排序时调用 Arrays.sort(nameArray,lastNameOrder); 其中,lastNameOrder为Comparator接口
这里以先比较名,再比较姓为例
class Name2{ public String firstName,lastName; public Name2(String firstName,String lastName){ this.firstName=firstName; this.lastName=lastName; } public String toString(){ //便于输出测试 return firstName+" "+lastName; } }测试类:
public class Test { public static void main(String[] args) { //实现Comparator的接口 Comparator firstNameOrder=new Comparator<Name2>() { public int compare(Name2 n1, Name2 n2) { int firstCmp=n1.firstName.compareTo(n2.firstName); return (firstCmp!=0?firstCmp:n1.lastName.compareTo (n2.firstName)); } }; Name2 nameArray[] = { new Name2("John", "Lennon"), new Name2("Karl", "Marx"), new Name2("Groucho", "Marx"), new Name2("Oscar", "Grouch") }; Arrays.sort(nameArray,firstNameOrder); //或者用Collections.sort也一样,只不过要转换成List //Collections.sort(Arrays.asList(nameArray),firstNameOrder); for(int i=0;i<nameArray.length;i++){ System.out.println(nameArray[i].toString()); } } 运行结果: Groucho Marx John Lennon Karl Marx Oscar Grouch注意: 是Collections, 而不是 Collection 是Arrays ,而不是 Array