`

list排序

    博客分类:
  • JAVA
阅读更多

以前都没怎么用到过list排序,今天一用就遇到问题了,Collections.sort(list);这个方法只能对没有泛型的list进行排序。

解决这个问题可以有两个方法

java的Comparator和Comparable
当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。 


 一、Comparator
强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给Collections.sort或Arrays.sort。
接口方法:
  /**
   * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。
   */ 
int compare(Object o1, Object o2);
案例:
import java.util.Arrays;
import java.util.Comparator;
public class SampleComparator implements Comparator<String> {
  public int compare(String o1, String o2) {
    return toInt(o1) - toInt(o2);
  }
  private int toInt(String str) {
    str = str.replaceAll("一", "1");
    str = str.replaceAll("二", "2");
    str = str.replaceAll("三", "3");
  
    return Integer.parseInt(str);
  }
  /**
   * 测试方法
   */
  public static void main(String[] args) {
    String[] array = new String[] { "一二", "三", "二" };
    Arrays.sort(array, new SampleComparator());
    for (int i = 0; i < array.length; i++) {
      System.out.println(array[i]);
    }
  }
}
     

 

 二、Comparable
强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。
接口方法:
  /**
   * @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。
   */
  int compareTo(Object o);
假设对象User,需要按年龄排序:
public class User {
  private String id;
  private int age;
  public User(String id, int age) {
    this.id = id;
    this.age = age;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
}
改造后的对象:
import java.util.Arrays;
public class User implements Comparable<User> {
  private String id;
  private int age;
  public User(String id, int age) {
    this.id = id;
    this.age = age;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public int compareTo(User u) {
    return this.age - u.getAge();
  }
  /**
   * 测试方法
   */
  public static void main(String[] args) {
    User[] users = new User[] { new User("a", 30), new User("b", 20) };
    Arrays.sort(users);
    for (int i = 0; i < users.length; i++) {
      User user = users[i];
      System.out.println(user.getId() + " " + user.getAge());
    }
  }

  

 

Comparator和Comparable的区别 
 先看一下使用Comparator对User集合实现排序的方式:一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
在TreeSet和TreeMap中添加的自定义对象必须实现Comparable接口

分享到:
评论

相关推荐

    java List排序工具类

    java List排序工具类 使用示例: new OrderUtils().order(list, "name", OrderUtils.DESC); 相关实例代码: public static void main(String[] args) { List&lt;Person&gt; list = getData(); // 获取无序数据 new ...

    实现了MFC list排序

    实现了MFC list排序实现了MFC list排序实现了MFC list排序实现了MFC list排序

    按照规则,对list排序

    * 对传入的list进行分组排序 * list里面数据格式 [01-01-开头.txt, 01-02-简介.jpg, 11-01-尾声.jpg, 11-03-空白.jpg, 11-04-空白2.jpg, 11-06-空白1.jpg, 11-02-答谢语.txt, 02-01-标题.jpg, 02-09-标题555.jpg, ...

    java List 排序 Collections.sort

    NULL 博文链接:https://xuedong.iteye.com/blog/1147254

    JAVA SortList 通用排序类

    JAVA SortList 通用排序类 从网上搜到一个java 对 List 排序的工具,自己改了下 支持 整数 和 浮点数 比较后排序,浮点数小数部分的有点问题,期待大牛帮忙优化。

    java List排序demo

    有时候我们可能有这样的需求:将一个List按照某个字段进行排序。比如现在有多个Student,我们要将这些学生按照成绩(grad)进行排序,本demo就是一个将List排序的demo

    CSortList list排序子类

    一个简单的list排序子类,没有封装。大家可以看看。直接调用即可

    java中list排序

    在数据库中查出来的列表list中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能。

    java list排序

    java开发,使用list对其进行排序,,易学简单。。。。。。。。。

    JAVALIST排序.pdf

    JAVALIST排序.pdf

    Dui list排序

    Duilist 排序,list以及扩展,可以随意插入控件

    list排序 Icompare接口

    继承icompare接口,从而实现list的排序,如果list有多列 可以执行任意列

    c# List类排序方法

    List类几种排序方法比较灵活 可以根据自己的需要 选用合适的方法

    java List中对象多属性排序及各属性排序设置

    天才之作:通过泛型,对List中对象多属性排序,支持设置各属性排序方式(动态属性),看了之后绝对让你震撼!

    C# List 排序

    NULL 博文链接:https://overloving.iteye.com/blog/1751131

    android List列表拼音排序

    在listview中,实现中文拼音排序的效果

    Android里List时间升序排序

    由于Collections排序实际上是对字符串进行比较,然后对日期排序,但是有时候给的日期不是很规范,所以想把日期统一化, 这样用Collections进行升序排序

    Java Collections.sort()实现List排序的默认方法和自定义方法

    主要介绍了Java Collections.sort()实现List排序的默认方法和自定义方法,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics