用Java集合中的Collections.sort方法对list排序的两种方法

用Collections.sort方法对list排序有两种方法

第一种是list中的对象实现Comparable接口,如下:

01/**

02* 根据order对User排序

03*/

04public class User implements Comparable

05

06

07

08

09

10

11

12

13

14      {

15    private String name;

16    private Integer order;

17    public String getName() {

18        return name;

19    }

20    public void setName(String name) {

21        this.name = name;

22    }

23    public Integer getOrder() {

24        return order;

25    }

26    public void setOrder(Integer order) {

27        this.order = order;

28    }

29    public int compareTo(User arg0) {

30        return this.getOrder().compareTo(arg0.getOrder());

31    }

32}

33

34

35

36

37

测试一下:

01public class Test{

02

03    public static void main(String[] args) {

04        User user1 = new User();

05        user1.setName("a");

06        user1.setOrder(1);

07        User user2 = new User();

08        user2.setName("b");

09        user2.setOrder(2);

10        List

11

12

13

14

15

16

17

18

19

20       list = new ArrayList

21

22

23

24

25

26

27

28

29

30       ();

31        //此处add user2再add user1

32        list.add(user2);

33        list.add(user1);

34        Collections.sort(list);

35        for(User u : list){

36            System.out.println(u.getName());

37        }

38    }

39}

40

41

42

43

44

45

46

47

48

49

输出结果如下

a

b

第二种方法是根据Collections.sort重载方法来实现,例如:

01/**

02* 根据order对User排序

03*/

04public class User { //此处无需实现Comparable接口

05    private String name;

06    private Integer order;

07    public String getName() {

08        return name;

09    }

10    public void setName(String name) {

11        this.name = name;

12    }

13    public Integer getOrder() {

14        return order;

15    }

16    public void setOrder(Integer order) {

17        this.order = order;

18    }

19}

主类中这样写即可:

查看源码

',1)">

打印?

01public class Test{

02    public static void main(String[] args) {

03        User user1 = new User();

04        user1.setName("a");

05        user1.setOrder(1);

06        User user2 = new User();

07        user2.setName("b");

08        user2.setOrder(2);

09        List

10

11

12

13

14

15

16

17

18

19       list = new ArrayList

20

21

22

23

24

25

26

27

28

29       ();

30        list.add(user2);

31        list.add(user1);

32

33        Collections.sort(list,new Comparator

34

35

36

37

38

39

40

41

42

43        (){

44            public int compare(User arg0, User arg1) {

45                return arg0.getOrder().compareTo(arg1.getOrder());

46            }

47        });

48        for(User u : list){

49            System.out.println(u.getName());

50        }

51    }

52}

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

输出结果如下

a

b

前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:

01Collections.sort(list,new Comparator

02

03

04

05

06

07

08

09

10

11       (){

12            public int compare(User arg0, User arg1) {

13 //            第一次比较专业

14                int i = arg0.getOrder().compareTo(arg1.getOrder());

15

16//            如果专业相同则进行第二次比较

17            if(i==0){

18//                第二次比较

19                int j=arg0.getXXX().compareTo(arg1.getXXX());

20//                如果学制相同则返回按年龄排序

21                if(j==0){

22                    return arg0.getCCC().compareTo(arg1.getCCC());

23                }

24                return j;

25            }

26            return i;

27            }

28        });

29

30

31

32

33

用Collections.sort方法对list排序有两种方法

第一种是list中的对象实现Comparable接口,如下:

01/**

02* 根据order对User排序

03*/

04public class User implements Comparable

05

06

07

08

09

10

11

12

13

14      {

15    private String name;

16    private Integer order;

17    public String getName() {

18        return name;

19    }

20    public void setName(String name) {

21        this.name = name;

22    }

23    public Integer getOrder() {

24        return order;

25    }

26    public void setOrder(Integer order) {

27        this.order = order;

28    }

29    public int compareTo(User arg0) {

30        return this.getOrder().compareTo(arg0.getOrder());

31    }

32}

33

34

35

36

37

测试一下:

01public class Test{

02

03    public static void main(String[] args) {

04        User user1 = new User();

05        user1.setName("a");

06        user1.setOrder(1);

07        User user2 = new User();

08        user2.setName("b");

09        user2.setOrder(2);

10        List

11

12

13

14

15

16

17

18

19

20       list = new ArrayList

21

22

23

24

25

26

27

28

29

30       ();

31        //此处add user2再add user1

32        list.add(user2);

33        list.add(user1);

34        Collections.sort(list);

35        for(User u : list){

36            System.out.println(u.getName());

37        }

38    }

39}

40

41

42

43

44

45

46

47

48

49

输出结果如下

a

b

第二种方法是根据Collections.sort重载方法来实现,例如:

01/**

02* 根据order对User排序

03*/

04public class User { //此处无需实现Comparable接口

05    private String name;

06    private Integer order;

07    public String getName() {

08        return name;

09    }

10    public void setName(String name) {

11        this.name = name;

12    }

13    public Integer getOrder() {

14        return order;

15    }

16    public void setOrder(Integer order) {

17        this.order = order;

18    }

19}

主类中这样写即可:

查看源码

',1)">

打印?

01public class Test{

02    public static void main(String[] args) {

03        User user1 = new User();

04        user1.setName("a");

05        user1.setOrder(1);

06        User user2 = new User();

07        user2.setName("b");

08        user2.setOrder(2);

09        List

10

11

12

13

14

15

16

17

18

19       list = new ArrayList

20

21

22

23

24

25

26

27

28

29       ();

30        list.add(user2);

31        list.add(user1);

32

33        Collections.sort(list,new Comparator

34

35

36

37

38

39

40

41

42

43        (){

44            public int compare(User arg0, User arg1) {

45                return arg0.getOrder().compareTo(arg1.getOrder());

46            }

47        });

48        for(User u : list){

49            System.out.println(u.getName());

50        }

51    }

52}

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

输出结果如下

a

b

前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:

01Collections.sort(list,new Comparator

02

03

04

05

06

07

08

09

10

11       (){

12            public int compare(User arg0, User arg1) {

13 //            第一次比较专业

14                int i = arg0.getOrder().compareTo(arg1.getOrder());

15

16//            如果专业相同则进行第二次比较

17            if(i==0){

18//                第二次比较

19                int j=arg0.getXXX().compareTo(arg1.getXXX());

20//                如果学制相同则返回按年龄排序

21                if(j==0){

22                    return arg0.getCCC().compareTo(arg1.getCCC());

23                }

24                return j;

25            }

26            return i;

27            }

28        });

29

30

31

32

33


相关文章

  • Android中获取正在运行的服务
  • 转载请注明出处:http://blog.csdn.net/qinjuning 关于PackageManager和ActivityManager的使用 ,自己也写了一些DEMO 了,基本上写的线路参考了Settings模块下的 应用程序,大家 ...查看


  • 公司笔试题
  • 一.文思创新 1.JSP的内置对象及其作用? 答: JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request 用户端请求,此请求会包含来自GET/POST请求的参数 response 网页传回用户端的回应 page ...查看


  • 最大N算法--最优资源实现
  • 最大N 算法--最优资源实现 假如做个XX 网, 当然要为金牌会员提供最优秀的资源(people )服务. 优秀资源比较规则是: 1. 有籍贯(籍贯莫有的, 不敢要) 2. 钱多 3. 籍贯为'jx' 的优先, 其他... 下面程序就是求最 ...查看


  • 排序比较次数的数据结构分析
  • 排序 排序问题的输入是一个线性表,该线性表的元素属于一个偏序集:要求对该线性表的元素做某种重排,使得线性表中除表尾外的每个元素都小于等于(或大于等于)它的后继. 设R 为非空集合A 上的二元关系,如果R 满足自反性(对于每一个x ∈A ,( ...查看


  • infosys面试总结
  • 1. 作用域public,private,protected,以及不写时的区别 区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly ...查看


  • JAVA复试问题答案
  • (一) JAVA复试的问题整理 1 Hibernate 的优化流程是如何实现的,流程是怎么样? 1. 尽量使用many-to-one ,避免使用单向one-to-many 象 2 Struts1与Struts2的区别? 在Action 实现 ...查看


  • C_三层架构_简单实例分析
  • 基于3层架构的课程管理系统 本模块工作任务     任务3-1:三层架构划分 任务3-2:数据访问层的实现 任务3-3:业务逻辑层的实现 任务3-4:表示层的实现 本模块学习目标  1.掌握三层架构的划分原理  2.掌握各层的设 ...查看


  • 浙大植物学小白的转录组笔记
  • 转录组入门(1):计算机及软件安装 作业要求 最好是有mac或者linux系统,8G 的内存,500G的存储即可.需要安装的软件包括 sratoolkit,fastqc,hisats,samtools,htseq-count,R,Rstud ...查看


  • 计算机编程英语单词汇总2015
  • 第一学期英文单词汇总 <Java 语言基础> 第1次 1. public公开 2. static静态 13. case 案例 14. default 默认 15. switch 开关 3. void 无返回 4. main 主要 ...查看


热门内容