• Java数组排序


    Java数组排序Arrays.sort,以及Comparator接口的用法

    有的时候需要对数组里的element进行排序。当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sort排序方法,在 数组元素比较少的时候为何不用?

      Sorting an Array 1. 数字排序  int[] intArray = new int[] { 4, 1, 3, -23 };

      Arrays.sort(intArray);

      输出: [-23, 1, 3, 4]

      2. 字符串排序,先大写后小写 String[] strArray = new String[] { "z", "a", "C" };

      Arrays.sort(strArray);

      输出: [C, a, z]

      3. 严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort

      Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);

      输出: [a, C, z]

      4. 反向排序, Reverse-order sort

      Arrays.sort(strArray, Collections.reverseOrder());

      输出:[z, a, C]

      5. 忽略大小写反向排序 Case-insensitive reverse-order sort

      Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);

      Collections.reverse(Arrays.asList(strArray));

      输出: [z, C, a]

      java初学者最常见的错误思想,就是试图去写一些方法来完成数组的排序功能,其实,数组排序功能,在java的api里面早已实现,我们没有 必要去重复制造轮子。

      Arrays类有一个静态方法sort,利用这个方法我们可以传入我们要排序的数组进去排序,因为我们传入的是一个数组的引用,所以排序完成的 结果也通过这个引用的来更改数组.对于整数、字符串排序,jdk提供了默认的实现,如果要对一个对象数组排序,则要自己实现 java.util.Comparator接口。

    1. package com.gjh.gee.arrays;  
    2. import java.util.Arrays;  
    3. public class ArraySortDemo {  
    4.     public void sortIntArray() {  
    5.         int[] arrayToSort = new int[] { 48, 5, 89, 80, 81, 23, 45, 16, 2 };  
    6.         System.out.println("排序前");  
    7.         for (int i = 0; i < arrayToSort.length; i++)  
    8.             System.out.println(arrayToSort[i]);  
    9.         // 调用数组的静态排序方法sort  
    10.         Arrays.sort(arrayToSort);  
    11.         System.out.println("排序后");  
    12.         for (int i = 0; i < arrayToSort.length; i++)  
    13.             System.out.println(arrayToSort[i]);  
    14.     }  
    15.     public void sortStringArray() {  
    16.         String[] arrayToSort = new String[] { "Oscar", "Charlie", "Ryan",  
    17.         "Adam", "David" };  
    18.         System.out.println("排序前");  
    19.         for (int i = 0; i < arrayToSort.length; i++)  
    20.             System.out.println(arrayToSort[i]);  
    21.         System.out.println("排序后");  
    22.         // 调用数组的静态排序方法sort  
    23.         Arrays.sort(arrayToSort);  
    24.         for (int i = 0; i < arrayToSort.length; i++)  
    25.             System.out.println(arrayToSort[i]);  
    26.     }  
    27.     public void sortObjectArray() {  
    28.         Dog o1 = new Dog("dog1", 1);  
    29.         Dog o2 = new Dog("dog2", 4);  
    30.         Dog o3 = new Dog("dog3", 5);  
    31.         Dog o4 = new Dog("dog4", 2);  
    32.         Dog o5 = new Dog("dog5", 3);  
    33.         Dog[] dogs = new Dog[] { o1, o2, o3, o4, o5 };  
    34.         System.out.println("排序前");  
    35.         for (int i = 0; i < dogs.length; i++) {  
    36.             Dog dog = dogs[i];  
    37.             System.out.println(dog.getName());  
    38.         }  
    39.         Arrays.sort(dogs, new ByWeightComparator());  
    40.         System.out.println("排序后:");  
    41.         for (int i = 0; i < dogs.length; i++) {  
    42.             Dog dog = dogs[i];  
    43.             System.out.println(dog.getName());  
    44.         }  
    45.     }  
    46.     public static void main(String[] args) {  
    47.         ArraySortDemo t = new ArraySortDemo();  
    48.         t.sortIntArray();  
    49.         t.sortStringArray();  
    50.         t.sortObjectArray();  
    51.     }  
    52. }  
    1. package com.gjh.gee.arrays;  
    2. public class Dog {  
    3.     private String name;  
    4.     private int weight;  
    5.     public Dog(String name, int weight) {  
    6.         this.setName(name);  
    7.         this.weight = weight;  
    8.     }  
    9.     public int getWeight() {  
    10.         return weight;  
    11.     }  
    12.     public void setWeight(int weight) {  
    13.         this.weight = weight;  
    14.     }  
    15.     public void setName(String name) {  
    16.         this.name = name;  
    17.     }  
    18.     public String getName() {  
    19.         return name;  
    20.     }  
    21. }  
    1. package com.gjh.gee.arrays;  
    2. import java.util.Comparator;  
    3. public class ByWeightComparator implements Comparator {  
    4.     public final int compare(Object pFirst, Object pSecond) {  
    5.         int aFirstWeight = ((Dog) pFirst).getWeight();  
    6.         int aSecondWeight = ((Dog) pSecond).getWeight();  
    7.         int diff = aFirstWeight - aSecondWeight;  
    8.         if (diff > 0)  
    9.             return 1;  
    10.         if (diff < 0)  
    11.             return -1;  
    12.         else  
    13.             return 0;  
    14.     }  
    15. }  

    下面补充一个Collections.sort排序,原理和Arrays.sort差不多。

    1. //一个POJO例子  
    2. class User {  
    3.  String name;  
    4.  String age;  
    5.    
    6.  public User(String name,String age){  
    7.   this.name=name;  
    8.   this.age=age;  
    9.  }  
    10.  public String getAge() {  
    11.   return age;  
    12.  }  
    13.  public void setAge(String age) {  
    14.   this.age = age;  
    15.  }  
    16.  public String getName() {  
    17.   return name;  
    18.  }  
    19.  public void setName(String name) {  
    20.   this.name = name;  
    21.  }   
    22. }  
    23.   
    24. //具体的比较类,实现Comparator接口  
    25. import java.util.Comparator;  
    26. import java.util.List;  
    27. import java.util.ArrayList;  
    28. import java.util.Collections;  
    29. public class ComparatorUser implements Comparator{  
    30.  public int compare(Object arg0, Object arg1) {  
    31.   User user0=(User)arg0;  
    32.   User user1=(User)arg1;  
    33.    //首先比较年龄,如果年龄相同,则比较名字  
    34.   int flag=user0.getAge().compareTo(user1.getAge());  
    35.   if(flag==0){  
    36.    return user0.getName().compareTo(user1.getName());  
    37.   }else{  
    38.    return flag;  
    39.   }    
    40.  }  
    41.    
    42. }  
    43.   
    44. //测试类  
    45. public class SortTest {  
    46.    
    47.  public static void main(String[] args){  
    48.   List userlist=new ArrayList();  
    49.   userlist.add(new User("dd","4"));  
    50.   userlist.add(new User("aa","1"));  
    51.   userlist.add(new User("ee","5"));  
    52.   userlist.add(new User("bb","2"));    
    53.   userlist.add(new User("ff","5"));  
    54.   userlist.add(new User("cc","3"));  
    55.   userlist.add(new User("gg","6"));  
    56.     
    57.   ComparatorUser comparator=new ComparatorUser();  
    58.   Collections.sort(userlist, comparator);  
    59.      
    60.   for (int i=0;i<userlist.size();i++){  
    61.    User user_temp=(User)userlist.get(i);  
    62.       System.out.println(user_temp.getAge()+","+user_temp.getName());   
    63.   }  
    64.     
    65.  }  
    66. }  


     //首先年龄排序,如果年龄相同,则按名字排序

    结果:
       1, aa
       2, bb
       3, cc
       4, dd
       5, ee                    //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
       5, ff
       6, gg

     
     
    本文转自:http://blog.csdn.net/giianhui/article/details/5650917
  • 相关阅读:
    工作中遇到的令人头疼的bug
    Cookie的简单用法
    C#之#if #endif的简单用法
    我们一起学习WCF 第十篇Wcf中实现事务
    一次性搞定Session
    设计模式-观察者模式
    类的扩展之 DataReader的扩展
    C#之Ref,Out以及TryParse()的用法
    C#之Lambda不得不说的用法
    C#之Action和Func的用法
  • 原文地址:https://www.cnblogs.com/Rozdy/p/4703819.html
Copyright © 2020-2023  润新知