list排序、Collections排序
排序两种方式
1 对象实现Comparable接口中compareTo方法
2 不用继承接口,外部直接比较,实现方法 Collections.sort( list, new Comparator() {...})
不同之处
1 用 Comparator 是策略模式,就是不改变对象自身,而用一个策略对象来改变它的行为。
2 Comparable改变对象自身。耦合性比较高
Integer、String等都实现了Comparable接口,默认是升序排序(排序后前者小于后者)
- 对于String,它是先比较对应字符的大小(ASCII码顺序,升序),如果都相同,则比较字符的长度(升序)
- Integer按照大小
// 正序排列
public int compare(int o1, int o2) {
return o1 - o2;
}
// 逆序排列
public int compare(int o1, int o2) {
return o2 - o1;
}
# 返回负数表示o1排在o2前面,返回正数代表o1排在o2后面
List list = new ArrayList<>();
list.add(2);
list.add(1);
Collections.sort(list);
System.out.println(list); //[1, 2]
List list = new ArrayList<>();
list.add("e");
list.add("f");
Collections.sort(list);
System.out.println(list); //[e, f]
具体查看源码
注意:
1 Collections.reverse(list) 是反转,不是倒叙或者降序
2 Collections.sort(list, Collator.getInstance(java.util.Locale.CHINA)); // 中文进行排序
网友评论