1. 第一种方式使用 Collections 工具类中的 sort() 方法
顺便介绍Collections工具类的sort()方法:
参数不同: 1 . void sort(List list),按自然排序的升序排序
2. void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑
public class Test {
public static void main(String[] args) {
List list1 = new ArrayList();
list1.add("4");
list1.add("2");
list1.add("34");
list1.add("43");
list1.add("55");
List list2 = new ArrayList();
list2.add(4);
list2.add(2);
list2.add(34);
list2.add(43);
list2.add(55);
//1.由于添加的元素具有可比较性,所以不用实现自然排序 倘若加上 list1.add(5201314); 会报 类型转换异常 ClassCastException
Collections.sort(list1);
Collections.sort(list2);
System.out.println(list1); // [2, 34, 4, 43, 55]
System.out.println(list2); // [2, 4, 34, 43, 55]
**
注意: TMD 越挖越深,很明显上面结果不一样,因为:Integer和String 底层代码compareTo()方法不一样。
**
/* Integer类的底层代码:比较的是值
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
String类的底层代码:比较的结果我之前在String常用类中介绍过。
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
2.直接使用list.sort()方法,传入实现Comparator接口的实现类的实例, 下面 为了省事直接传入 匿名内部类
public static void main(String[] args) {
List<String> list = new ArrayList();
list.add("4");
list.add("2");
list.add("34");
list.add("43");
list.add("55");
list.sort(new Comparator<String>(){
public int compare(String o1,String o2){
return o1.compareTo(o2);
}
});
System.out.println(list); //[2, 34, 4, 43, 55]
原文:https://www.cnblogs.com/gshao/p/10140694.html