一、集合中的基本數據類型排序
1. 使用Collections類的sort()方法
2.sort(List<T> list):
根據元素的自然順序對指定列表按照升序進行排序
package com.mpp.sort; 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中的數據進行排序 System.out.println("排序后:"); Collections.sort(list); for(int n:list){ System.out.print(n+" "); } } }
二、集合中的字符串排序
package com.mpp.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("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("排序后:"); //按照ascll碼值進行排序 for(String s:list){ System.out.print(s+ " "); } } }
三、Comparator接口
1. 強行對某個對象進行整體排序的比較函數
2. 可以將Comparator傳遞給sort方法(如Collections.sort或Array.sort)
3. int compare(T o1,T o2)比較用來排序的兩個參數
-如果o1<o2,返回負整數
-如果o1==o2,返回0
-如果o1>o2,返回正整數
4. boolean equals(Object obj)指示某個其他對象是否“等於”此Comparator
此方法可以被Object類中的equals方法覆蓋,不必重寫
例題:對寵物貓分別按名字升序,年齡降序
Cat類:
package com.mpp.sort; public class Cat { private String name; //名字 private int mounth; //年齡 private String species;//品種 public Cat(String name,int mounth,String species){ super(); this.setName(name); this.setMounth(mounth); this.setSpecies(species); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMounth() { return mounth; } public void setMounth(int mounth) { this.mounth = mounth; } public String getSpecies() { return species; } public void setSpecies(String species) { this.species = species; } //toString方法重寫 @Override public String toString(){ return "[名字:"+name+",年齡:"+mounth+",品種:"+species+"]"; } }
NameComparator類:
package com.mpp.sort; 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); //name1>name2返回正整數,反之返回負整數,相等返回0 //倒序比較 int n = name2.compareTo(name1); return n; } }
AgeComparator類
package com.mpp.sort; import java.util.Comparator; public class AgeComparator implements Comparator<Cat> { @Override public int compare(Cat o1,Cat o2){ //按年齡降序排序 int age1 = o1.getMounth(); int age2 = o2.getMounth(); int n = age1-age2; //如果age1>age2,返回正數,反之返回負數,相等返回0 return age2-age1; //降序 // return age1-age2; //升序 } }
CatTest類:
package com.mpp.sort; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class CatTest { public static void main(String[] args) { //按照名字升序排序 Cat cafe = new Cat("cafe",5,"美短"); Cat milk = new Cat("milk",3,"橘貓"); Cat huahua = new Cat("huahua",2,"橘貓"); List<Cat> list = new ArrayList<>(); list.add(cafe); list.add(milk); list.add(huahua); //排序前 System.out.println("排序前:"); for(Cat cat:list){ System.out.println(cat); } //按名字進行排序 Collections.sort(list,new NameComparator()); System.out.println("按名字排序后:"); for(Cat cat:list){ System.out.println(cat); } //按年齡進行降序排序 Collections.sort(list,new AgeComparator()); System.out.println("按年齡降序排序后:"); for(Cat cat:list){ System.out.println(cat); } } }
總結排序方式:
1. 定義寵物貓類
2. 定義比較器類,實現Conparator接口
3. 排序,調用Collections.sort()方法,傳入要排序的存放類的list和比較器
四、Comparable接口
1. 此接口強行對實現它的每個類的對象進行整體排序
2. 這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法
3. 對於集合,通過調用Collections.sort方法進行排序
4. 對於數組,通過調用Array.sort方法進行排序
5. int compareTo(T o)方法
該對象小於,等於或大於指定對象,則分別返回負整數,零或正整數
例:對商品價格進行降序排列
商品類:
package com.mpp.sort; public class Goods implements Comparable<Goods> { private String id; private String name; private double price; public String getId() { return id; } public String getName() { return name; } public double getPrice() { return price; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public void setPrice(double price) { this.price = price; } public Goods(String id,String name,double price){ this.id = id; this.name = name; 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(price1-price2).intValue(); //升級排序 //price2-price1; //降序 return n; } }
商品測試類:
package com.mpp.sort; 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("s001","手機",2000); Goods g2 = new Goods("s002","冰箱",5000); Goods g3 = new Goods("s003","電視機",3000); List<Goods> goodsList = new ArrayList<Goods>(); goodsList.add(g1); goodsList.add(g2); goodsList.add(g3); //排序前 System.out.println("排序前:"); for(Goods g:goodsList){ System.out.println(g); } Collections.sort(goodsList); //排序后 System.out.println("排序后:"); for(Goods g:goodsList){ System.out.println(g); } } }
總結排序方式:
1. 定義商品類並實現Comparable接口,並且重寫compareTo()方法
2. 定義商品測試類,把商品實例添加到ArrayList中,調用Colletcions.sort()做比較,傳入商品實例的list