【5】Java集合排序
一、集合排序
数组排序:
int[] arr={1,2,3};
Arrays.sort(arr);
集合排序:使用Collections类中 sort()方法对List集合进行排序
Collections.sort(list)
根据元素的自然顺序对指定列表按升序进行排序
如果是字符串或者字符数据按照Ascall码值进行排序
二、集合排序案例
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(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、string数据如何排序 StringSort
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+" "); } } }
三、比较器
1、Comparator接口
1)强行对某个对象进行整体排序的比较函数;
2)可以将Comparator传递给sort方法(如 Collections.sort 或 Arrays.sort);
3)int compare(T o1, T o2) 用来比较排序的两个参数:
a. 如果 o1 < o2,返回负整数;
b. 如果 o1 == o2,返回0;
c. 如果 o1 > o2,返回正整数。
4)boolean equals(Object obj) 指示某个其他对象是否“等于”此Comparator;此方法可以被Object类中的equals方法覆盖,不必重写。
代码实例:
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; } //getter与setter方法 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 "[名字:" + name + ", 年龄:" + month + ", 品种:" + species + "]"; } }
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; } }
import java.util.Comparator; public class NameComparator implements Comparator<Cat> {//对Cat进行比较 @Override public int compare(Cat o1, Cat o2) { // 按名字升序排序 String name1=o1.getName(); String name2=o2.getName(); int n=name1.compareTo(name2);//比较两个字符串的内容,比较结果是int类型的变量 return n; } }
import java.util.ArrayList; import java.util.Collections; import java.util.List; 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(huahua); catList.add(fanfan); catList.add(maomao); //排序前 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); } } }
2、Comparable接口
--此接口强行对实现它的每个类的对象进行整体排序。
--这种排序通常被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。
--对于集合和数组排序通过调用Collections.sort和Arrays.sort方法进行排序 int compareTo(T o)方法
--该对象小于、等于或大于指定对象(参数内对象),则分别返回负整数、零或正整数。
代码实例:
public class Goods implements Comparable<Goods> { private String id;//商品编号 private String name;//商品名称 private double price;//商品价格 //构造方法 public Goods(String id,String name,double price){ this.id=id; this.name=name; this.price=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; } public String toString(){ return "商品编号:"+id+",商品名称:"+name+",商品价格:"+price; } @Override public int compareTo(Goods o) { // 取出商品价格 double price1=this.getPrice(); double price2=o.getPrice(); int n=new Double(price2-price1).intValue(); return n; } }
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class GoodsTest { public static void main(String[] args) { Goods g1 = new Goods("s00001", "手机", 2000); Goods g2 = new Goods("s00002", "冰箱", 5000); Goods g3 = new Goods("s00003", "电视机", 3000); List<Goods> goodsList = new ArrayList<Goods>(); goodsList.add(g1); goodsList.add(g2); goodsList.add(g3); // 排序前 System.out.println("排序前:"); for (Goods goods : goodsList) { System.out.println(goods); } Collections.sort(goodsList); // 排序后 System.out.println("排序后:"); for (Goods goods : goodsList) { System.out.println(goods); } } }
3、Comparator接口和Comparable接口的区别