1 概述
- 集合中基本數據類型的排序
- 集合中字符串的排序
- Comparator接口
- Comparable接口
與數組排序區分開。
集合排序:
- 使用Collections類裏的sort()方法。
sort(List<T> list)
- 根據元素的自然順序對指定列表按升序進行排序。
自然順序:數字的自然順序指的是數字的數值,字符的自然順序是指字符的ASCII碼值。
2 整型&字符串數據排序
2.1 整型排序
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(7);
list.add(1);
list.add(3);
System.out.println("排序前:");
for(int n:list) {
System.out.print(n+" ");
}
System.out.println();
Collections.sort(list);
System.out.println("排序後:");
for(int n:list) {
System.out.print(n+" ");
}
}
}
2.2 字符串排序
package com.imooc.sort;
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("blue");
list.add("yellow");
list.add("red");
list.add("green");
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+" ");
}
}
}
3 Comparator接口
3.1 對寵物貓進行名字降序&年齡升序順序
package com.imooc.sort;
public class Cat {
// 屬性
private String name;
private int month;
private String species;
// 構造方法
public Cat(String name, int month, String species) {
super();
this.name = name;
this.month = month;
this.species = species;
}
//get/set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
@Override
public String toString() {
return "Cat [name=" + name + ", month=" + month + ", species=" + species + "]";
}
}
package com.imooc.sort;
import java.util.Comparator;
import com.imooc.set.Cat;
public class NameComparator implements Comparator<Cat> {
@Override
public int compare(Cat arg0, Cat arg1) {
// 降序排序
String name0=arg0.getName();
String name1=arg1.getName();
int n=name1.compareTo(name0);
return n;
}
}
package com.imooc.sort;
import java.util.Comparator;
import com.imooc.set.Cat;
public class AgeComparator implements Comparator<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
// 升序排序
int age1=o1.getMonth();
int age2=o2.getMonth();
return age1-age2;
}
}
package com.imooc.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.imooc.set.Cat;
public class CatTest {
public static void main(String[] args) {
// 按名字降序
Cat huahua=new Cat("huahua",5,"英國短毛貓");
Cat fanfan=new Cat("fanfan",2,"中華田園貓");
Cat maomao=new Cat("maomao",3,"中華田園貓");
List<Cat> catList=new ArrayList<Cat>();
catList.add(maomao);
catList.add(fanfan);
catList.add(huahua);
//排序前
System.out.println("排序前:");
for(Cat cat:catList) {
System.out.println(cat);
}
//排序後
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);
}
}
}
4 comparable
調用sort方法進行排序時,不需要指定Comparable接口的實現類