博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
猿来绘Java-41-源码分析String对象的数组的排序(JDK1.8)
阅读量:2094 次
发布时间:2019-04-29

本文共 1593 字,大约阅读时间需要 5 分钟。

 

1. 查看下 Arrays的sort方法,源码使用了 merge sort 或者binary insertion sort

public static void sort(Object[] a) {    if (LegacyMergeSort.userRequested)        legacyMergeSort(a);    else        ComparableTimSort.sort(a, 0, a.length, null, 0, 0);}/** To be removed in a future release. */private static void legacyMergeSort(Object[] a) {    Object[] aux = a.clone();    mergeSort(aux, a, 0, a.length, 0);}

2. 查看其中的一个排序算法,以 merge sort举例, String[] 中的每个元素是 String字符串,元素与元素比较时使用了 compareTo 方法, 也就是调用了String类的compareTo方法,比较之后进行 swap(dest, j, j-1);

 

private static void legacyMergeSort(Object[] a) {    Object[] aux = a.clone();    mergeSort(aux, a, 0, a.length, 0);}private static void mergeSort(Object[] src,                              Object[] dest,                              int low,                              int high,                              int off) {    int length = high - low;    // Insertion sort on smallest arrays    if (length < INSERTIONSORT_THRESHOLD) {        for (int i=low; i
low && ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--) swap(dest, j, j-1); return; } ...

 

3. String 中的 compareTo方法

依次比较两个字符串中的每一个char, 如果不相等 return c1 - c2

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;}

 

 

 

 

 

转载地址:http://gtuhf.baihongyu.com/

你可能感兴趣的文章
GridView+存储过程实现'真分页'
查看>>
flask_migrate
查看>>
解决activemq多消费者并发处理
查看>>
UDP连接和TCP连接的异同
查看>>
hibernate 时间段查询
查看>>
java操作cookie 实现两周内自动登录
查看>>
Tomcat 7优化前及优化后的性能对比
查看>>
Java Guava中的函数式编程讲解
查看>>
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
C结构体、C++结构体、C++类的区别
查看>>