现在的位置: 首页 > 综合 > 正文

读JSE源码(一):Arrays

2018年11月07日 ⁄ 综合 ⁄ 共 1181字 ⁄ 字号 评论关闭

JDK版本:1.7.0.4

 

目录

1 Arrays介绍

1.1 排序

1.2 查找

2 使用例子

 

1 Arrays介绍

    java.util.Arrays提供对数组的操作,例如排序、查找。

 

1.1 排序

     java对基本类型数组采用快速排序,对Object对象数组采用Timsort算法排序(Timsort排序算法原理)。

     对Object对象没有采用快速排序,是因为快速排序不是稳定的排序算法,而对于对象的排序,稳定性很重要,Timsort是稳定快速的排序算法。比如学生成绩单,一开始是按学生的学号顺序排好的,现在需要按成绩成绩排序,那么要保证:原来张三在李四前面,即使他们成绩相同,张三不能跑到李四的后面去。另外,对象数组中保存的只是对象的引用,这样多次移位并不会造成额外的开销,但是,对象数组对比较次数一般比较敏感,有可能对象的比较比单纯数的比较开销大很多。Timsort排序算法在这方面比快速排序做得更好。

  对于自定义的对象进行比较/排序,要自定义比较规则:
(1)继承接口Comparable
(2)重写java.lang中的接口Comparable的方法compareTo,定制比较的规则

 

1.2 查找

   binarySearch方法提供折半查找算法

 注意:使用binarySearch前数组要是排好序的数组,因为折半查找算法就是在排好序的数组中找。

2 使用例子

2.1 常用排序方法

数字排序  int[] intArray = new int[] { 4, 1, 3, -23 };
Arrays.sort(intArray);
输出: [-23, 1, 3, 4]
字符串排序,先大写后小写 String[] strArray = new String[]{ "z", "a", "C" };
Arrays.sort(strArray);
输出: [C, a, z]
严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
输出: [a, C, z]
反向排序, Reverse-order sort
Arrays.sort(strArray, Collections.reverseOrder());
输出:[z, a, C]
忽略大小写反向排序 Case-insensitive reverse-order sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(Arrays.asList(strArray));
输出: [z, C, a]

2.2 对象排序

一般在对对象进行比较或排序时,需要对象实现Comparable接口或者在使用排序方法(比如Arrays的sort)方法时,传入实现了Comparator接口的类的对象。详细例子参见这里

抱歉!评论已关闭.