1.java提供的默认list排序方法

主要代码:

List<String> list = new ArrayList();list.add("刘媛媛");

list.add("王硕");
list.add("李明");
list.add("刘迪");
list.add("刘布");

//升序
Collections.sort(list,Collator.getInstance(java.util.Locale.CHINA));//注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
for(int i=0;i<list.size();i++)
{
    System.out.print(list.get(i));
}
System.out.println("");

//降序
Collections.reverse(list);//不指定排序规则时,也是按照字母的来排序的
for(int i=0;i<list.size();i++)
{
     System.out.print(list.get(i));
}

输出结果:

李明刘布刘迪刘媛媛王硕
王硕刘媛媛刘迪刘布李明

2.自定义的排序规则:

第一种是model类实现Comparable接口,重写重写int compareTo(Object o)方法

model类:

public class StudentDTO implements Comparable
{
 private String name;
 private int age;

public String getName()
{
    return name;
}

public void setName(String name)
{
     this.name = name;
}

public ObjType getType()
{
    return type;
}

public void setAge(int age)
{
     this.age= age;
}

@Override
public int compareTo(Object o)
{

StudentDTO sdto = (StudentDTO)o;

int otherAge = sdto.getAge();
      // note: enum-type's comparation depend on types' list order of enum method
      // so, if compared property is enum-type ,then its comparationfollow ObjEnum.objType order

return this.age.compareTo(otherAge);
}
}

主方法:

public static void main(String[] args)
{
      List<StudentDTO> studentList = new ArrayList();

StudentDTO s1 = new StudentDTO ();

s.setName("yuanyuan");

s.setAge(22);

studentList.add(s1);

StudentDTO s1 = new StudentDTO ();

s.setName("lily");

s.setAge(23);

studentList.add(s2);

Collections.sort(studentList);  //按照age升序 22,23,

Collections.reverse(studentList);  //按照age降序 23,22

}

第二种是比较器类实现Comparator接口,重写int compare(Object o1, Object o2)方法;

model类:

public class StudentDTO implements Comparable
{
     private String name;
     private int age;

public String getName()
     {
         return name;
     }

public void setName(String name)
    {
         this.name = name;
     }

public ObjType getType()
     {
         return type;
     }

public void setAge(int age)
     {
         this.age= age;
     }

}

比较器类:

class MyCompartor implements Comparator
{
     @Override
     public int compare(Object o1, Object o2)
    {

StudentDTO sdto1= (StudentDTO )o1;

StudentDTO sdto2= (StudentDTO )o2;

return sdto1.getAge.compareTo(stdo2.getAge())

}
}

主方法:

public static void main(String[] args)
{
      List<StudentDTO> studentList = new ArrayList();

StudentDTO s1 = new StudentDTO ();

s.setName("yuanyuan");

s.setAge(22);

studentList.add(s1);

StudentDTO s1 = new StudentDTO ();

s.setName("lily");

s.setAge(23);

studentList.add(s2);

MyComparetor mc = new MyComparetor();

Collections.sort(studentList,mc);     //按照age升序 22,23,

Collections.reverse(studentList,mc);    //按照age降序 23,22

}

附注:

1.对于数组的排序方法如下:

String[] names = {"王林",  "杨宝", "李镇", "刘迪", "刘波"};  
Arrays.sort(names, com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE));//升序;   
System.out.println(Arrays.toString(names));

2.对于汉字的排序:可以尝试使用ICU4J会得到更好的结果,特别是姓为某些生僻字的时候,

用com.ibm.icu.text.Collator替换java.text.Collator,用com.ibm.icu.util.ULocale替换java.util.Locale

3.对于枚举类型的enum1.compareTo(enum2)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,

而不是按照值的字母先后顺序比较的。

转自:http://www.cnblogs.com/liuyuanyuanGOGO/p/java_collections.html

java Collections.sort()实现List排序的默认方法和自定义方法【转】的更多相关文章

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

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...

  2. java Collections.sort()实现List排序自定义方法

    方法一: package testSimple; import java.util.ArrayList; import java.util.Collections; import java.util. ...

  3. java Collections.sort()

    sort()是Collections中的静态方法,用于对List容器中的元素排序. 如容器list中存储的是Integer对象 List<Integer> list =Arrays.asL ...

  4. Java Collections.sort方法对list集合排序

    1.排序测试类 package com.ljq.test; import java.util.ArrayList; import java.util.Collections; import java. ...

  5. java List 排序 Collections.sort() 对 List 排序

    class User { String name; String age;  public User(String name,String age){  this.name=name;  this.a ...

  6. 关于java Collections.sort 排序

    public static void main(String[] args) { int[] dd = {12,34,46,123,23,2,35,13,543231,65,5645,57}; Arr ...

  7. java collection.sort()根据时间排序list

    首先:定义bean 然后:定义比较器 最后:测试使用 一.userBean package com.butterfly.Class; public class user { private Strin ...

  8. Collections.sort 的日期排序

    public static void main(String[] args) throws ParseException { // sort降序排列 List<Date> dates = ...

  9. Collections.sort 给集合排序

    List<MenuVo> child_menus = new ArrayList<MenuVo>(); for (MenuVo menuVo : child_menus) { ...

随机推荐

  1. CSS 转载

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...

  2. Python的scrapy之爬取51job网站的职位

    今天老师讲解了Python中的爬虫框架--scrapy,然后带领我们做了一个小爬虫--爬取51job网的职位信息,并且保存到数据库中 用的是Python3.6  pycharm编辑器 爬虫主体: im ...

  3. windows环境下安装scrapy框架报错问题--最快捷有效的解决方案

    windows在执行如下命令,安装scrapy的过程中会报错: pip install scrapy 报错分析: windows环境下,会出现如下错误: 1.提示的错误是编译环境的问题,字面意思看需要 ...

  4. webpack入门概念

    一 概念 1 入口(entry) 入口起点(entry point)提示webpack 应该使用那个模块,来作为构建其内部依赖图得开始.进入入口七点后,webpack 会找出那些模块和库是入口起点(直 ...

  5. 初步学习pg_control文件之二

    接前文:初步认识pg_control文件 继续学习,pg_control文件在何处形成的?是在initdb的时候,运用的函数如下: /* * This func must be called ONCE ...

  6. [Python 3.X]python练习笔记[2]-----用python实现七段数码管显示年月日

    #SevenDigitsDrawV2.py import turtle import time def drawGap(i):#绘制数码管间隔 turtle.penup() turtle.fd(i) ...

  7. 一步一步学Linq to sql(三):增删改

    示例数据库 字段名 字段类型 允许空 字段说明 ID uniqueidentifier 表主键字段 UserName varchar(50) 留言用户名 PostTime datetime 留言时间 ...

  8. 第四模块:网络编程进阶&数据库开发 考核实战

     1.什么是进程?什么是线程? 什么是协程? 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 线程:在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 协程是一种用 ...

  9. P2678 跳石头(二分答案)

    P2678 跳石头 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间 ...

  10. 【题解搬运】PAT_A1016 Phone Bills

    从我原来的博客上搬运.原先blog作废. 题目 A long-distance telephone company charges its customers by the following rul ...