字符串对象本质上是字符数组。字符串的排序归结为其对应的字符数组的排序(不是数组内部排序,而是数组之间的比较和排序)。
而字符都有对应的码值,单就英文字母a~z来说,各个字母对应码值相对是升序的,即a的码值小于b的码值,依次往后增大。因为每个字符都有一一对应且唯一的码值,这就为比较乃至排序提供了基础。
可按如下思路对两个字符串排序。
1.如两串对应的字符数组长度相等,从数组下标为0开始开始比较码值,如果相等,下标加一,继续向后比较,直到出现码值不等时,结束比较。若是升序,则(码值较小的字符→所在的字符数组→此数组对应的字符串)排在前面,另外一个排在后面;降序则反之。
如abd, abc升序排序后为abc, abd。
2.若字符串对应长度不相等,则取两串中较小的长度作为比较的最大轮次,此时比较和情况1一样。若比完最大轮次对应数组相同下标对应的码值都相同,则串长的排在后面(假如升序)。
如abcdefg, abcd按升序排序后为abcd, abcdefg。
以下代码是java.lang.String的compareTo方法源码:
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;
}
版权声明:本文为qq_44922239原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。