- 源码
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;
}
- 分析
1.首先获取到两个字符串转为char数组后的长度,选出小的那个当做界值
2.开始遍历比较两个char数组,比较同一坐标下两个字符的十进制值,如果不相等,就进行运算,把两个字符的差值进行运算,并返回,如果相等,下标值递增,继续循环。
3.如果遍历结束,已经超出界值,就把两个char数组的长度相减后的值作为返回值
ListComparator接口list = new ArrayList<>(); list.add("asd"); list.add("bsd"); list.add("csd"); list.add("dsd"); list.add("esd"); list.add("fsd"); Collections.sort(list, new Comparator () { @Override public int compare(String o1, String o2) { String s1 = String.valueOf(o1); String s2 = String.valueOf(o2); return s1.compareTo(s2); } });
上面比较的是基础类,如果是自定义类的话,可以自定义比较条件
ListlistUser = new ArrayList<>(); listUser.add(new User("ZHANGSAN",15)); listUser.add(new User("LISI",19)); listUser.add(new User("WANGWU",16)); Collections.sort(listUser, new Comparator () { @Override public int compare(User o1, User o2) { //return o1.getAge()-o2.getAge(); 正序 return o2.getAge()-o1.getAge();//倒序 } }); System.out.println(listUser); Collections.sort(listUser, new Comparator () { @Override public int compare(User o1, User o2) { //return o1.getAge()-o2.getAge(); 正序 return o2.getName().compareTo(o1.getName());//倒序 } }); System.out.println(listUser); Collections.sort(listUser, new Comparator () { @Override public int compare(User o1, User o2) { return 0; } }); System.out.println(listUser);



