java对ArrayList中的元素自定义排序

任何类只要实现了Comparable接口就可以调用Java提供的Array.sort()函数或是是Collections.sort()函数对一个对象列表排序,在重写Comparable中的函数是我们可以自定义对列表的排序方式,比如要对一个学生列表先按年龄排序,然后如果年龄相同的话就按姓名的字典序排序,甚至可以添加更多的排序条件。一些就以这个例子用java代码简单实现一下。

我们要对学生排序,首先就要定义学生Student对象,并且要实现Comparable接口,从字面上就能很明显的看出,只有实现了该接口才有可比性嘛!哈哈

定义Student类:

[html]  view plain  copy
  1. <pre name="code" class="java">class Student implements Comparable<Student> {//因为在ArrayList中使用了泛型,所以要在此用<>表明类型,比如是对String类实现的接口就写String      
  2.     String name;      
  3.     int age;      
  4.       
  5.     public Student(String name, int age) {      
  6.         super();      
  7.         this.name = name;      
  8.         this.age = age;      
  9.     }      
  10.           
  11.     public int compareTo(Student tempStudent) {//从写接口中的函数      
  12.     if (this.age != tempStudent.age) {//当年龄不相同时,则只按年龄的大小对学生进行排序      
  13.         return this.age - tempStudent.age;//交换两者的顺序可以实现是升序还是降序      
  14.     }      
  15.     else {//如果两个学生的年龄相同,那么我们就按其姓名排序      
  16.         if (!this.getName().equals(tempStudent.getName())) {//如果前几个字母都一样,我们就不能进行比较,所以要对第一个不同的字母进行比较      
  17.             int i = 0;      
  18.             while (i < this.name.length() && i < tempStudent.getName().length()) {//使用循序找到第一个不同的字母      
  19.                 if (this.name.charAt(i) != tempStudent.getName().charAt(i))      
  20.                     break;      
  21.                 i++;      
  22.             }      
  23.             return this.name.charAt(i) - tempStudent.getName().charAt(i);//返回名字的比较值      
  24.         }      
  25.         else//当名字相同是      
  26.             return -1;//顺便返回一个值,因为这不会影响排序的结果,只是为了与前面的if搭配      
  27.     }      
  28. }      
  29.       
  30. public String toString() {      
  31.     return "name=" + name + "age=" + age;      
  32. }      
  33.       
  34. public String getName() {      
  35.     return this.name;      
  36. }     

 

 
 

        上面定义了Student类,下面我们将Student类的对象添加的ArrayList的对象中,并是用sort函数排序:

包含main方法的类:

         

[java]  view plain  copy
  1. public class arraylist的使用 {  
  2.   
  3.     public static void main(String[] args) {  
  4.         ArrayList<Student> stuList = new ArrayList<Student>(20);//设置stuList的接受类型是Student,设定默认容量是20个元素   
  5.         stuList.add(new Student("ciong"21));  
  6.         stuList.add(new Student("xanarry"11));  
  7.         stuList.add(new Student("amith"21));  
  8.         stuList.add(new Student("jason"19));  
  9.         stuList.add(new Student("marray"25));  
  10.         stuList.add(new Student("blex"21));//添加6个学生到stuList中  
  11.           
  12.         System.out.println("---original order---");  
  13.           
  14.         for (Iterator<Student> iterator = stuList.iterator(); iterator.hasNext(); ) {//使用迭代器遍历输入所有学生信息  
  15.             System.out.println(iterator.next());  
  16.         }  
  17.           
  18.         //使用sort函数排序  
  19.         //写法1:  
  20.         stuList.sort(null);  
  21.         ///写法2:  
  22.         Collections.sort(stuList);  
  23.           
  24.         System.out.println("---sorted---");  
  25.         for (Iterator<Student> iterator = stuList.iterator(); iterator.hasNext(); ) {//输入有序结果  
  26.             System.out.println(iterator.next());  
  27.         }  
  28.     }  
  29. }  

         两次的输出结果如下:

        

[java]  view plain  copy
  1. ---original order---  
  2. name=ciong, age=21  
  3. name=xanarry, age=11  
  4. name=amith, age=21  
  5. name=jason, age=19  
  6. name=marray, age=25  
  7. name=blex, age=21  

          排序后:

[java]  view plain  copy
  1. ---sorted---  
  2. name=xanarry, age=11  
  3. name=jason, age=19  
  4. name=amith, age=21  
  5. name=blex, age=21  
  6. name=ciong, age=21  
  7. name=marray, age=25  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值