版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~
http://blog.csdn.net/xiaoduan_/article/details/79343240
JAVA集合排序
基本类型和字符串类型排序
基本类型和字符串类型排序直接调用
Collections.sort(list);
根据元素的自然顺序对指定列表按升序进行排序
+ 对存储在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+" ");
}
}
}
- 对存放在List中的字符串进行排序
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
1. 单独定义比较类,实现Comparator接口
- 按照名字比较
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;
}
}
按年龄比较
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. 在排序的时候传入比较的策略
//按名字进行升序排序
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()方法
@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方法时,只需指定集合名即可 |