大家知道String默认排序是按照字符的ASCCII码进行排序的。大小写字母的ASCCII编码是不同的,这样的话,排序时同一个字母的大小写就会被其他字母分隔开。
说起来可能比较不好理解。
用代码来描述可能大家比较容易理解。
看看下面这段代码。
大家觉得执行的结果会是什么。
一起来看一下。
如果我们想在排序时忽略大小写,也就是排序的结果为[A,a,B,b,C,c]。
那要怎么做呢?
可能有的朋友会说,使用比较器。
对了,可是比较器内要用什么样的逻辑来处理呢。
接着往下看吧。
大家注意看,在比较器的compare方法内使用了String类的compareToIgnoreCase方法,这个方法就是用来做字符串忽略大小写的比较的。
看看执行结果是不是达到预期了吧。
结果没有问题,达到了我们的预期。
一起来看看Stirng类的compareToIgnoreCase做了什么吧。
是调用了一个常量对象CASE_INSENSITIVE_ORDER的compare方法。
这个对象是个什么对象呢,继续深挖。
CASE_INSENSITIVE_ORDER是CaseInsensitiveComparator类的对象,这个类是String类的内部类,并且实现了Comparator接口。
那再看看这个CaseInsensitiveComparator是怎么实现Comparator接口的compare方法的吧。
如图中代码所示,对两个字符串进行比较时,会将字符串中的字符转换成统一的大小写进行比较,这样就达到了忽略大小写的功能。
这里正好顺带提醒大家一下,这个compare方法返回的值是两个值的差,也就是说返回的结果不可能只是-1,0,1这三个值。所以大家在以后的编码中如果要对compare的结果进行判断要用大于0,等于0,小于0做比较,而不要用等于-1,等于0,等于1来做比较。