通过Java排序List集合的元素的几种方法

用Java工具类Collectionssort()方法,对List集合元素进行排序。

Collections提供两种排序方法:

一、Collections.sort(List<T> list);

  此方法需要泛型T这个Bean实现Comparable<T>接口,并且实现compareTo()方法排序;

二、Collections.sort(List<T> list, Comparator<? super T> c);

  此方法,在泛型T这个Bean没有实现Comparable<T>接口的时候,多个一个参数,是一个接口我们需要实现其compare()方法排序;

排序List集合里面的元素,例如:

 1 /**
 2 * 简单的Collection排序
 3 */
 4 public static void simpleSort() {
 5     List<String> sortElement = new ArrayList<>();
 6     sortElement.add("A");
 7     sortElement.add("D");
 8     sortElement.add("R");
 9     sortElement.add("T");
10     sortElement.add("F");
11     System.out.println("未排序之前的List:" + sortElement);
12     Collections.sort(sortElement);
13     System.out.println("排序之后的List:" + sortElement);
14 }

输出结果:

未排序之前的List:[A, D, R, T, F]
排序之后的List:[A, D, F, R, T]

由于String类其实自身已经实现了Comparable接口,Java已经帮我们封装好了,所以我们不需要再实现compareTo()方法;

下面来看下,新建一个Bean,实现Comparable<T>接口,并且实现compareTo()方法来自定义排序。例如:

新建Bean:JavaProgrammer :

 1 package com.max.basis;
 2
 3 import java.io.Serializable;
 4
 5 /**
 6  * Java程序员
 7  * @author Max.
 8  * @date 2018/7/20
 9  */
10 public class JavaProgrammer implements Comparable<JavaProgrammer>, Serializable {
11     /**
12      * 姓名
13      */
14     private String name;
15     /**
16      * 工资
17      */
18     private int wage;
19     /**
20      * 年龄
21      */
22     private int age;
23
24     @Override
25     public int compareTo(JavaProgrammer o) {
26         // 首先根据年龄排序
27         int sort = this.getAge() - o.getAge();
28         // 返回值0代表相等,1表示大于,-1表示小于;
29         if (sort == 0) {
30             // 在根据工资排序
31             return this.getWage() - o.getWage();
32         }
33         return sort;
34     }
35
36     public JavaProgrammer(String name, int wage, int age) {
37         this.name = name;
38         this.wage = wage;
39         this.age = age;
40     }
41
42     public String getName() {
43         return name;
44     }
45
46     public void setName(String name) {
47         this.name = name;
48     }
49
50     public int getWage() {
51         return wage;
52     }
53
54     public void setWage(int wage) {
55         this.wage = wage;
56     }
57
58     public int getAge() {
59         return age;
60     }
61
62     public void setAge(int age) {
63         this.age = age;
64     }
65 }
 1 /**
 2 * Bean实现Comparable接口,实现compareTo()方法来排序
 3 */
 4 public static void sortBeans() {
 5     List<JavaProgrammer> sortBeans = new ArrayList<>();
 6     sortBeans.add(new JavaProgrammer("A", 20000, 20));
 7     sortBeans.add(new JavaProgrammer("B", 55000, 21));
 8     sortBeans.add(new JavaProgrammer("C", 65000, 20));
 9     sortBeans.add(new JavaProgrammer("D", 120000, 28));
10     sortBeans.add(new JavaProgrammer("E", 90000, 23));
11     Collections.sort(sortBeans);
12     for (JavaProgrammer javaProgrammer : sortBeans) {
13         System.out.println("姓名:" + javaProgrammer.getName()
14             + ",工资:" + javaProgrammer.getWage()
15             + ",年龄:" + javaProgrammer.getAge());
16     }
17 }

输出结果:

姓名:A,工资:20000,年龄:20
姓名:C,工资:65000,年龄:20
姓名:B,工资:55000,年龄:21
姓名:E,工资:90000,年龄:23
姓名:D,工资:120000,年龄:28

看到上面的Bean,实现了Comparable<T>接口,并且实现compareTo()方法,首先根据年龄大小排序,如果年龄相等,在根据工资大小排序;

再看不在Bean里面实现Comparable<T>接口,在需要用到排序的时候,用Collections.sort(List<T> list, Comparator<? super T> c)方法排序,例如:

新建Bean:TestBean :

 1 package com.max.basis;
 2
 3 import java.io.Serializable;
 4
 5 /**
 6  * 测试类
 7  * @author Max.
 8  * @date 2018/7/20
 9  */
10 public class TestBean implements Serializable {
11
12     private Integer age;
13
14     private Integer score;
15
16     public TestBean(Integer age, Integer score) {
17         this.age = age;
18         this.score = score;
19     }
20
21     public Integer getAge() {
22         return age;
23     }
24
25     public void setAge(Integer age) {
26         this.age = age;
27     }
28
29     public Integer getScore() {
30         return score;
31     }
32
33     public void setScore(Integer score) {
34         this.score = score;
35     }
36 }
 1 /**
 2 * 在Collection排序的时候给人Comparator参数
 3 */
 4 private static void sortTestBean() {
 5     List<TestBean> sortList = new ArrayList<>();
 6     sortList.add(new TestBean(18, 402));
 7     sortList.add(new TestBean(18, 512));
 8     sortList.add(new TestBean(17, 633));
 9     sortList.add(new TestBean(19, 497));
10     Collections.sort(sortList, new Comparator<TestBean>() {
11         @Override
12         public int compare(TestBean o2, TestBean o1) {
13             int sort = o1.getAge() - o2.getAge();
14             if (sort == 0) {
15                 return o1.getScore() - o2.getScore();
16             }
17             return sort;
18         }
19     });
20     for (TestBean testBean : sortList) {
21         System.out.println("年龄:" + testBean.getAge()
22             + ",总分:" + testBean.getScore());
23     }
24 }

输出结果:

年龄:19,总分:497
年龄:18,总分:512
年龄:18,总分:402
年龄:17,总分:633

 注意:如果需要排序或者降序,只需要把o1.getAge() - o2.getAge()两个互换位置就可以了。

然而上面的例子只是对List集合的英文及数字排序,再来看看Collections.sort 中文排序。

public static void sortString(){
    List<String> sortStringList = new ArrayList<>();
    sortStringList.add("刘邦");
    sortStringList.add("项羽");
    sortStringList.add("关羽");
    sortStringList.add("赵云");
    sortStringList.add("诸葛亮");
    sortStringList.add("曹操");
    sortStringList.add("曹操到");
    sortStringList.add("LOL");
    sortStringList.add("赵高");
    sortStringList.add("10086");
    System.out.println("未排序之前的List:" + sortStringList);
    Comparator<String> comparator = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            Collator collator = Collator.getInstance();
            return collator.getCollationKey(o1).compareTo(collator.getCollationKey(o2));
        }
    };
    Collections.sort(sortStringList,comparator);
    System.out.println("排序之后的List:" + sortStringList);
}

输出结果:

未排序之前的List:[刘邦, 项羽, 关羽, 赵云, 诸葛亮, 曹操, 曹操到, LOL, 赵高, 10086]
排序之后的List:[10086, LOL, 曹操, 曹操到, 关羽, 刘邦, 项羽, 赵高, 赵云, 诸葛亮]

排序规则是:数字排在最前,英文字母其次,汉字则按照拼音进行排序。

原文地址:https://www.cnblogs.com/oablog/p/9342233.html

时间: 2024-10-10 15:10:49

通过Java排序List集合的元素的几种方法的相关文章

python中List添加、删除元素的几种方法

一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作).在Python中,向List添加元素,方法有如下4种方法(append(),extend(),insert(), +加号). 1. append() 追加单个元素到List的尾部,只接受一个参数,参数可以是任何数据类型,被追加的元素在List中保持着原结构类型.此元素如果是一个list,那么这个list将作为一

JS获取网页中HTML元素的几种方法分析

getElementById getElementsByName getElementsByTagName 大概介绍 getElementById ,getElementsByName ,getElementsByTagName ###adv### 后两个是得到集合,byid只是得到单个对象 getElementById 的用法 举个例子: <a id="link1" name="link1" href=http://homepage.yesky.com>

解析Jquery取得iframe中元素的几种方法

DOM方法:父窗口操作IFRAME: ? 1 window.frames["iframeSon"].document IFRAME操作父窗口: ? 1 window.parent.document jquery方法: 在父窗口中操作 选中IFRAME中的所有输入框: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25  $(window.frames["iframeSon"].doc

Jquery取得iframe中元素的几种方法(转载)

iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作 DOM方法:父窗口操作IFRAME:window.frames["iframeSon"].documentIFRAME操作父窗口: window.parent.document jquery方法:在父窗口中操作 选中IFRAME中的所有输入框: $(window.frames["iframeSon"].document).find(":text&quo

Java构造和解析Json数据的两种方法详解一

原文链接:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多Java下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSO

【转】Java构造和解析Json数据的两种方法详解一

Java构造和解析Json数据的两种方法详解一 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和J

Java构造和解析Json数据的两种方法详解一——json-lib

转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSON-

CSS 隐藏页面元素的 几 种方法总结

用 CSS 隐藏页面元素有许多种方法.你可以将 opacity 设为 0.将 visibility 设为 hidden.将 display 设为 none 或者将 position 设为 absolute 然后将位置设到不可见区域. 你有没有想过,为什么我们要有这么多技术来隐藏元素,而它们看起来都实现的是同样的效果?每一种方法实际上与其他方法之间都有一些细微的不同,这些不同决定了在一个特定的场合下使用哪一个方法.我们只需要记住的细小不同点,根据不同情况选择上面这些方法中适合的方法来隐藏元素. d

jQuery -&gt; 获取后代元素的三种方法

如果我们有内容如下的html文件,那么如何选取包含在<p>元素内的<i>元素呢? 邪馬台国の謎と弥生時代 紀元前1000年ごろ.水稲工作の技術をもつ集団が大挙して日本に移住してきた.これによって弥生時代が始まった. 縄文人も南方から伝わった稲を栽培していたが.彼らは原野を開いて大掛かりな水田をつくる発想を持たなかった.しかし.北九州に新たな文化を持って集団が来たのを知った彼らは次第に.水稲工作を受け入れ弥生人へとか分かっていた. html源码如下 <h1>邪馬台国の謎と