本文共 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; ilow && ((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/