对象排序
一个List对象中如果元素类型为String,则其按字母表顺序排序,而如果元素类型为Date,则按照年代排序,那如何判断元素的排序呢?String和Date对象都实现Comparable接口,Comparable接口的实现类会提供一个自然排序规则,能够实现对象的自动排序,下表列出一些重要的Comparable接口实现类:
类 | 自然排序规则 |
---|---|
Byte |
带符号的数字大小 |
Character |
不带符号的数字大小 |
Long |
带符号的数字大小 |
Integer |
带符号的数字大小 |
Short |
带符号的数字大小 |
Double |
带符号的数字大小 |
Float |
带符号的数字大小 |
BigInteger |
带符号的数字大小 |
BigDecimal |
带符号的数字大小 |
Boolean |
Boolean.FALSE < Boolean.TRUE(false排前,true排后) |
File |
视系统而定,路径的字母顺序 |
String |
字母顺序 |
Date |
年代顺序 |
CollationKey |
视地区而定,字母顺序 |
如果对一个列表对象使用Collection.sort(list)进行排序,而其元素没有实现Comparable,该方法将抛出ClassCastException,类似的,如果使用
Collections.sort(list, comparator),而
方法中的comparator不能对list中的元素进行相互比较,也会抛出ClassCastException
异常,元素之间能进行比较又叫做双向比较,即使类不同有的也可以进行双向比较。
Comparable
接口
Comparable
接口包含一下方法:
public interface Comparable<T> { public int compareTo(T o); }
compareTo方法接收一个对象然后然后与自身进行比较,当参数对象大于,等于,或者小于自身时,将分别返回大于零,0和小于零的整数。
Comparator接口
如果不使用元素的自然排列方法进行排列,或者要对一些没有实现Comparable接口的对象进行排列,那么就要用到Comparator,Comparator仅含有一个方法:
public interface Comparator<T> { int compare(T o1, T o2); }
其中的compare方法有两个参数,即进行对比的两个对象,当第一个对象大于,等于或者小于第二个对象时分别返回负整数整数,0和正整数。
-----
未完待续。。。
时间: 2024-11-03 21:53:11