读JSE源码(一):Arrays
来源:互联网 发布:网络模块套什么定额 编辑:程序博客网 时间:2024/06/05 19:48
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接口的类的对象。详细例子参见这里
- 读JSE源码(一):Arrays
- 读JSE源码(五)SortedMap & NavigableMap
- 读JSE源码(三)集合之TreeMap(1)
- 读JSE源码(二):Comparable接口和Comparator接口
- 读JSE源码(三)集合之TreeSet
- 读JSE源码(四)集合之Map接口
- 读JSE源码(四)栈和队列
- 读JSE源码(三)集合之TreeMap(2)-节点Entry
- 读JSE源码(三)集合之TreeMap(2)-同步
- java Arrays.sort源码学习之旅(一)
- Java工具类之Arrays(一)
- 常用类“一”(Arrays,Integer,Character)
- Arrays.asList()源码剖析
- Arrays源码学习
- Java Arrays 源码 笔记
- Arrays源码分析
- Java的Arrays源码
- 源码解析-集合-Arrays
- lua学习笔记 1 android 调用Lua, Lua脚本中启动Intent
- 后缀数组
- POSTFIX的基本配置与管理
- Linux现在处于什么地位?
- repo
- 读JSE源码(一):Arrays
- 机器学习方法的PPT
- 计数排序(Counting-Sort)
- how to c libraries
- 烦心事真多啊!
- SQLServer 中把varchar类型转换为int型然后进行排序
- 编译mysql
- asp.net与word文档在线
- 如何应用Java的可变参数