Java常用工具类—集合排序

时间:2021-05-20

一、集合排序概述

1、主要内容

  • 集合中的基本数据类型排序
  • 集合中的字符串排序
  • Comparator接口
  • Comparable接口
  • 回顾:

    //数组的排序int[] arr= {2,3,4,5,2,1};Arrays.sort(arr);

    2、集合排序方法

  • 使用Collections类的sort(List list)方法
  • sort(List list)是根据元素的自然顺序对指定列表按升序进行排序。
  • 二、对基本数据类型和字符串类型进行排序

    1、对基本数据类型排序

    List中只能存放对象,要想存放基本数据类型的话,泛型中只能写其对应的包装类。

    import java.util.ArrayList;import java.util.Collections;import java.util.List;public class IntSort { public static void main(String[] args) { //对存储在List中的整形数据进行排序 List<Integer> list = new ArrayList<Integer>(); list.add(5); list.add(9); list.add(3); list.add(1); System.out.println("排序前:"); for (int n: list) { System.out.print(n + " "); } System.out.println(); //对List中的数据进行排序 Collections.sort(list); System.out.println("排序后:"); for (int n: list) { System.out.print(n + " "); } } }

    2、对字符串排序

    集合中字符串的排序后其实是按字符顺序,ASCII值顺序进行排序的

    import java.util.ArrayList;import java.util.Collections;import java.util.List;public class StringSort { public static void main(String[] args) { //对存放在List中的字符串进行排序。 List<String> list = new ArrayList<String>(); list.add("orange"); list.add("blue"); list.add("yellow"); list.add("gray"); System.out.println("排序前: "); for (String str: list) { System.out.print(str + " "); } System.out.println(); //对List中的数据进行排序 Collections.sort(list); System.out.println("排序后: "); for (String str: list) { System.out.print(str + " "); } //排序后其实是按字母顺序 }}

    三、Comparator接口

    1、问题场景:

    自定义的类如何排序?

    2、解决方法:

    使用Comparable或Comparator接口

    3、Comparator接口介绍

  • 强行对某个对象进行整体排序的比较函数
  • 可以将Comparator传递给sort方法(如Collections.sort或 Arrays.sort)
  • 包含方法int compare(T o1, T o2) 比较用来排序的两个参数 –如果o1<o2,返回负整数 –如果o1==o2,返回0 –如果o1>o2,返回正整数
  • 包含方法boolean equals(Object obj)指示某个其他对象是否“等于”此Comparator。此方法可以被Object类中的equals方法覆盖,不必重写,也就是说,我们在Comparator接口中只需要重写compare这个方法。
  • 4、对宠物猫进行排序

    对自定义的类按照一定的规则进行排序:
    (1)对宠物猫按名字进行排序
    String类型具有compareTo()方法

    例:

    int n = name1.conpareTo(name2);

    如果name1<name2时,那么n是负整数,相等则为0,否则为正整数。
    name1与name2位置调换下,则会实现倒序的排序。

    import java.util.Comparator;//按名字进行升序排序的比较器public class NameComparator implements Comparator<Cat> { @Override public int compare(Cat o1, Cat o2) { //按名字升序排序 String name1 = o1.getName(); String name2 = o2.getName(); int n = name1.compareTo(name2); return n; } }

    语法格式:

    Collections.sort(catList, new NameComparator());

    (2)对宠物猫按年龄降序排序

  • 调用compare方法大于0,就把前一个数和后一个数交换,也就是把大的数放后面了,即所谓的升序了。如果第二个参数与第一个参数调换顺序,也就是降序了。
  • 按int类型比较,直接返回减法后的差值。
  • import java.util.Comparator;//按年龄进行降序排序的比较器public class AgeComparator implements Comparator<Cat> { @Override public int compare(Cat o1, Cat o2) { int age1 = o1.getMonth(); int age2 = o2.getMonth(); return age2 - age1; }}

    语法格式:

    Collections.sort(catList, new AgeComparator());

    四、Comparable接口

    1、Comparable概述

  • Comparable接口位于Java.lang包下面
  • 此接口强行对实现他的每个类的对象进行整体排序
  • 这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法
  • 对于集合,通过调用Collection.sort方法进行排序
  • 对于数组,通过调用Arrays.sort方法进行排序
  • int compareTo(T o)方法:该对象小于,等于或大于指定对象,则分别返回负整数,0,或正整数
  • 2、对商品价格进行降序排序案例

    (1)操作步骤

  • 对待排序的类进行接口实现
  • 重写compareTo方法
  • 直接调用Collections.sort()方法。
  • (2)代码实现
    ①商品类的定义

    public class Goods implements Comparable<Goods> { //实现Comparable接口,利用泛型限定比较的类型 private String id; //商品编号 private String name; //商品名称 private double price; //商品价格 //构造方法 public Goods() { } public Goods(String id, String name, double price) { this.setId(id); this.setName(name); this.setPrice(price); } //getter和setter方法 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "商品编号:" + id + ",商品名称:" + name + ",商品价格:" + price; } @Override public int compareTo(Goods o) { //重写compareTo方法。 //取出商品价格 double price1 = this.getPrice(); double price2 = o.getPrice(); int n = new Double(price2 - price1).intValue(); //double类型的差值转为int return n; }

    ②排序步骤

    Collections.sort(goodsList);

    五、集合排序总结

    Comparator和Comparable接口的区别

    1、Comparator:

    ①位于java.util包
    ②在要比较的类的外部实现该接口
    ③调用sort方法时,要指定Comparator的实现类
    使用顺序:

  • 实现要排序的接口
  • 实现comparator接口
  • 测试
  • 2、Comparable

    ①位于java.lang包
    ②在要比较的类上实现该接口
    ③调用sort方法时,只需指定集合名即可
    使用顺序:

    定义要比较的类,并实现comparable接口
    测试

    以上所述是小编给大家介绍的Java集合排序详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章