Java集合排序

基本类型和字符串类型排序

基本类型和字符串类型排序直接调用
Collections.sort(list);根据元素的自然顺序对指定列表按升序进行排序

  • 对存储在List中的整型数据进行排序
    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
    26
    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+" ");
    }
    }
    }
  • 对存放在List中的字符串进行排序
    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
    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 s:list){
    System.out.print(s+" ");
    }
    System.out.println();
    Collections.sort(list);
    System.out.println("排序后:");
    for(String s:list){
    System.out.print(s+" ");
    }
    }
    }

自定义类型排序

使用Comparable和Comparator接口

Comparator接口
  • 强行对某个对象进行自定义排序的函数
  • 可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort)
  • int compare(T o1, T o2) 比较用来排序的两个参数。 如果o1<o2,返回负整数
    如果o1==o2,返回如果o1>o2,返回正整数
  • boolean equals(Object obj) 指示某个其他对象是否“等于”此 Comparator,此方法可以被Object类中的equals方法覆盖,不必重写
1. 单独定义比较类,实现Comparator接口
  • 按照名字比较
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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;
    }

    }

按年龄比较

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}

}

2. 在排序的时候传入比较的策略
1
2
3
4
5
6
7
8
9
10
11
12
//按名字进行升序排序
Collections.sort(catList, new NameComparator());
System.out.println("按名字升序排序后:");
for(Cat cat:catList){
System.out.println(cat);
}
//按年龄进行降序排序
Collections.sort(catList, new AgeComparator());
System.out.println("按年龄降序排序后:");
for(Cat cat:catList){
System.out.println(cat);
}
Comparable接口
  • 此接口强行对实现它的每个类的对象进行整体排序。
  • 这种排序被称为类的自然排序,类的 compareTo 方法被称为它
    的自然比较方法。
  • 对于集合,通过调用Collections.sort方法进行排序。
  • 对于数组,通过调用Arrays.sort方法进行排序
  • int compareTo(T o)方法 :该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数
    在构建类的时候,在要比较的类中重写 int compareTo()方法
    1
    2
    3
    4
    5
    6
    7
    8
    @Override
    public int compareTo(Goods o) {
    // 取出商品价格
    double price1=this.getPrice();
    double price2=o.getPrice();
    int n=new Double(price2-price1).intValue();//降序排列
    return n;
    }
Comparator接口与Comparable接口的区别
Comparator Comparable
位于java.util包 位于java.long包
在要比较的类的外部实现该接口,比较灵活,可以自定义多中比较策略,并且在排序的时候按需选择 在要比较的类上实现该接口,只能定义一种排序策略
调用sort方法时,要指定Cmoparator的 实现类 调用sort方法时,只需指定集合名即可
-------------End Of This ArticleThank You For Reading-------------