OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法
本篇主要讲解java.util.Arrays这个针对数组的工具类。
1.可复用的工具类和方法。
这个工具类里,包含很多针对数组的工具方法,如
排序、交换、二分查找、比较、填充、复制、hashcode、toString等。
2.禁止默认构造函数,防止实例化。
private Arrays() {
}
这个类只包含了一些静态的工具方法,实例化没有任何意义。
更严格一点,还可以将类定义为 public final Arrays。
3.把针对数组的工具方法,统一放到一个工具类中,方便管理。
public static void sort(int[] a);
public static int binarySearch(long[] a, int fromIndex, int toIndex, long key);
public static int hashCode(int a[]);
每一个工具方法处理的对象都是数组。
即根据“数组”这个维度来把相关代码放在一起的。
类似的,我们也可以根据“数据类型”来组织工具代码,如针对String类型的工具类放在StringUtils里,Integer类型的工具类放在IntegerUtils里。
具体如何组织,结合实际情况需要。
4.针对不同数据类型的。
public static void sort(int[] a);
public static void sort(long[] a);
public static void sort(float[] a);
同样是排序这个功能,既有处理整型数组int[],也有长整型数组long[],还有float[]等。
5.函数的组织方式。
功能相同的方法依次排列。
排序函数sort相关的放一起。
搜索函数binarySearch、比较函数equals、填充函数fill、拷贝函数copyOf、计算hashcode的hashCode、转化为字符串的toString等都依次把相关的代码组织在一起。
类似的工具类还有java.util.Collections等,最大的区别是Collections的主要是针对List、Set、Collection等集合的。
Arrays类结构的截图


参考资料: OpenJDK源码,JDK中文API文档
相关阅读
OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常
OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
OpenJDK源码研究笔记(三)-RandomAccess等标记接口的作用
原文参见:http://FansUnion.cn/articles/2831
OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法的更多相关文章
- OpenJDK源码研究笔记(五)-缓存Integer等类型的频繁使用的数据和对象,大幅度提升性能(一道经典的Java笔试题)
摘要 本文先给出一个看似很简单实则有深意的Java笔试面试题,引出JDK内部的缓存. JDK内部的缓存,主要是为了提高Java程序的性能. 你能答对这道"看似简单,实则有深意"的J ...
- OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)
在上一篇OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构中,我们大致了解了Java字节码文件的结构. 本篇详细地介绍了如何读取.class文件的大部分细节. 1.构造文件 ...
- OpenJDK源码研究笔记(十四):三种经典的设计方法,接口,接口-抽象类-具体实现类,接口-具体实现类
在研究OpenJDK源码过程中,我发现常用的设计方法就是2种:接口,接口-抽象类-具体实现类 . 在一些其它开源框架和业务开发中,经常存在着第3种设计,接口-具体实现类. 1.只有接口,没有实现类. ...
- OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构
最近在看OpenJDK源码的过程中,顺便看了Java编译器(javac)的源码. 为了理解javac的源码,需要先搞懂Java字节码文件(.class)的结构. 于是,我就认真看了下OpenJDK中J ...
- [置顶] OpenJDK源码研究笔记(九)-可恨却又可亲的的异常(NullPointerException)
可恨的异常 程序开发过程中,最讨厌异常了. 异常代表着程序出了问题,一旦出现,控制台会出现一屏又一屏的堆栈错误信息. 看着就让人心烦. 对于一个新人来讲,遇到异常经常会压力大,手忙脚乱,心生畏惧. 可 ...
- OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
Comparable和Comparator是JDK中定义的2个比较接口,很相似,但又有所不同. 这2个接口的作用和区别也是Java中的常见经典面试题. 下面我们就来详细介绍下这2个接口的定义.作用.区 ...
- OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常
OpenJDK源码研究笔记系列文章,是我在阅读OpenJDK7源码的过程中的一些体会.收获.看法. 把研究过程中的成长和收获一点点地整理出来,是对自己研究学习的一个小结,也有可能给学习Java的一些同 ...
- OpenJDK源码研究笔记(九)-可恨却又可亲的的异常(NullPointerException)
可恨的异常 程序开发过程中,最讨厌异常了. 异常代表着程序出了问题,一旦出现,控制台会出现一屏又一屏的堆栈错误信息. 看着就让人心烦. 对于一个新人来讲,遇到异常经常会压力大,手忙脚乱,心生畏惧. 可 ...
- OpenJDK源码研究笔记(十):枚举的高级用法,枚举实现接口,竟是别有洞天
在研究OpenJDK,Java编译器javac源码的过程中,发现以下代码. 顿时发现枚举类竟然也有如此"高端大气上档次"的用法. 沙场点兵(用法源码) com.sun.tools. ...
随机推荐
- 改变浏览器页面默认滚动条样式scrollbar
scrollbar-3d-light-color 设置或检索滚动条亮边框颜色scrollbar-highlight-color 设置或检索滚动条3D界面的亮边(ThreedHighlight)颜色sc ...
- CSS布局总结(三)
前言:今天学的有点少,主要是有点迷.... 这是昨天没写的 一.水平居中 .parent{ text-aglin:center; } .child{ display:inline-block; } . ...
- [luogu4035 JSOI2008] 球形空间产生器 (矩阵 高斯消元)
传送门 题目描述 有一个球形空间产生器能够在 nnn 维空间中产生一个坚硬的球体.现在,你被困在了这个 nnn 维球体中,你只知道球面上 n+1n+1n+1 个点的坐标,你需要以最快的速度确定这个 n ...
- python3 将两个列表生成一个字典
需求: 存在两个list如下 list1 = ["one", "two", "three"] list2 = ["1", ...
- hadoop中HDFS文件系统 nameNode出现的问题 nameNode无法打开
1,修改core-site.xml文件,先改成localhost,将所有进程关闭stop-all.sh(或者是先关闭所有进程,然后再修改文件),然后重启,在修改core-site.xml文件成ip地址 ...
- JavaScript 实现留言框
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- javascript-js中技巧集合
1.值的转换 在JavaScript中,一共有两种类型的值:原始值(primitives)和对象值(objects).原始值有:undefined, null, 布尔值(booleans), 数字(n ...
- start_kernel——boot_cpu_init及PER_CPU
init/main.c /* * Activate the first processor. */ static void __init boot_cpu_init(void) { int cpu = ...
- Extjs4.2 ajax请求url中传中文參数乱码问题
今天有个需求须要在url中传入中文參数.结果在后台取得时出现乱码,怀疑可能是编码问题.上网查询了资料,试了几种办法.发现有一种可行,记录在此,以便查阅. url中用encodeURI 进行2次编码: ...
- C++ STL之list具体解释
list容器是一个双向链表,能够高效地进行插入删除元素. 构造函数 list<Elem> c;//空list list<int> c(3);//创建一个含有三个默认值是0的元素 ...