JDK8源码之Arrays
Arrays是一个工具类,包含了各种数组的操作方法,包括排序、搜索、转化,在JDK1.8中新增了一些方法,对原有一些方法的并发性做了增强,极大地提高了原有方法的性能。
1、rangeCheck(int arrayLength, int fromIndex, int toIndex)方法
数组下标校验
2、sort(T[] array, int fromIndex, int toIndex, [Comparator<? super T> c])方法
T 数值类型对象
c 排序对象,数组排序依据
排序方法,采用的算法是双键快排(Dual Pivot QuickSort),比普通的快速排序性能要好的多,时间复杂度O(NlogN)
3、parallelSort(T[] array, [int fromIndex], [int toIndex])方法
排序合并算法,先把数组递归切分成子数组,直到子数组长度等于或者小于最小排序数组长度,子数组排序之后再进行合并,在数据规模达到一定程度,大概是2的18次方,表现出来的性能要高于sort方法
4、legacyMergeSort方法
老旧的排序方法即将在未来被删除
5、sort(Object[] array, [int fromIndex], [int toIndex])方法
对象数组升序排序,注意所属对象必须属于同一个类,对象所属类必须实现Comparable接口
6、parallelPrefix(T[] array, BinaryOperator<T> op)方法
并行计算,将数组中的每个元素替换为指定关联操作前缀的积累
如:(1,2,3,4,5)关联操作为加法,则结果返回(1,3,6,10,15)
7、binarySearch(T[] array, T key)方法
使用二分查找算法,查询元素,注意数组必须是提前使用sort方法排好序的,并且如果数组包含两个相等的重复元素,返回结果的顺序不保证。
8、equals(T[] a, T[] b)方法
两个数组判等,当且仅当两个数组都为空或者两个数组拥有相同的元素和且元素顺序相同两个数组相等,否则不等。
9、deepEquals(T[] a, T[] b)方法
该用于多维数组比较,当两个数组都为空或者两个数组元素相等并且当元素中包含数组数组的相应元素也相等则两个数组相等,否则不等
10、fill(T[] array, [int fromIndex],[int toIndex], T value)方法
在数组array的[fromIndex,toIndex)下标范围插入value
11、copyOf(T[] original, int length)方法
数组拷贝,创建一个指定长度的数组,拷贝源数组,长度比源数组小则截断,比源数组大则多出部分元素用默认值填充
12、copyOfRange(T[] array, int fromIndex, int toIndex)方法
数组部分拷贝
13、asList方法
将数组转化为集合容器List,注意虽然返回对象的类也属于有序集合List,但与java.util.ArrayList并非同一个类,而是Arrays内部实现的一个基于数组的有序集合List
14、toString方法
数组的字符串表示
15、deepToString方法
数组的字符串表示,当该数组包含数组元素时,递归表示,通常用于表示多维数组
16、setAll(T[] array, IntFunction<? extends T> generator)方法
基于数组下标和计算函数generator生成数组元素
17、parallelSetAll(T[] array, IntFunction<? extends T> generator)方法
作用同上,不过它是并行计算,在一定数据规模下性能要比setAll方法优越
18、spliterator(T[] array, [int fromIndex], [int toIndex])
基于指定数组array和范围返回一个Spliterator对象,基于Spliterator对象可进行数组的分割、遍历等操作
19、stream(T[] array, [int startIndex], [int endIndex])
基于指定数组的范围返回元素相应的Stream
JDK8源码之Arrays的更多相关文章
- JDK8源码解析 -- HashMap(二)
在上一篇JDK8源码解析 -- HashMap(一)的博客中关于HashMap的重要知识点已经讲了差不多了,还有一些内容我会在今天这篇博客中说说,同时我也会把一些我不懂的问题抛出来,希望看到我这篇博客 ...
- JDK8源码阅读之Collection及相关方法
最近面试总会被问到JDK8中的一些新特性,所以闲下来抽时间看了一下8的源码,目前主要看的是数据结构部分,特此记录一下. 新增函数式接口,实现该接口的可以直接用lambda表达式. default和st ...
- Jvm(jdk8)源码分析1-java命令启动流程详解
JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...
- JDK8源码解析 --- Long 类型
最近都在看JDK8的源码,想把记录下来与大家一起共享,每天 积累一点,每天成长一点.看了装箱Long类型,有好多以前没有注意到或者不知道的内容,慢慢懂得.废话不多说,直接上代码讲解... 1.缓存区L ...
- JDK8源码解析 -- HashMap(一)
最近一直在忙于项目开发的事情,没有时间去学习一些新知识,但用忙里偷闲的时间把jdk8的hashMap源码看完了,也做了详细的笔记,我会把一些重要知识点分享给大家.大家都知道,HashMap类型也是面试 ...
- 使用 IDEA 查看 JDK8 源码
使用 idea 查看 oracle jdk 8 源码时发现 Unsafe 没有源码. 解决方法: 到 openjdk-8 下载页面:http://jdk.java.net/java-se-ri/8-M ...
- java源码分析:Arrays.sort
仔细分析java的Arrays.sort(version 1.71, 04/21/06)后发现,java对primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用 ...
- 深入JDK源码之Arrays类中的排序查找算法(转)
原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...
- jdk源码剖析一:OpenJDK-Hotspot源码包目录结构
开启正文之前,先说一下源码剖析这一系列,就以“死磕到底”的精神贯彻始终,JDK-->JRE-->JVM(以openJDK代替) 最近想看看JDK8源码,但JDK中JVM(安装在本地C:\P ...
随机推荐
- 给zabbix添加percona监控模板
简单说明一下给zabbix添加的percona的监控模板. 在percona官方网站有说明怎么安装,这里记录下步骤.首先搭建好的zabbix环境. 监控插件连接 : 链接:https://pan.ba ...
- button theme
children:[ButtonTheme.bar( child:ButtonBar( children:[ FlatButton... ], ),), ]
- Windows下用python来获取微信撤回消息
转自:https://blog.csdn.net/sunzhibin1/article/details/83348304 娱乐(windows系统) 安装itchat itchat是一个开源的pyth ...
- ant常用的内置 task转自https://www.cnblogs.com/baicj/archive/2015/12/21/5063608.html
ant 例如: <target name="callProjectB"> <echo message="In projectA calling proj ...
- 20175312 2018-2019-2 《Java程序设计》第5周学习总结
20175312 2018-2019-2 <Java程序设计>第5周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第六章的学习,主要的学习渠道是PPT,和书的课后习题. 总结如下 ...
- Learning-Python【28】:基于TCP协议通信的套接字
什么是 Socket Socket 是应用层与 TCP/IP 协议通信的中间软件抽象层,它是一组接口.在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Sock ...
- mongodb 设置权限
切换到要加密的数据库use diary 创建有 readWrite 权限的用户db.createUser({ user: "youuser", pwd: "youpass ...
- idea下使用Git基本操作(转载)
IDEA中Git的更新.提交.还原方法: https://blog.csdn.net/geng31/article/details/78585557 IDEA中Git的提交到GitHub http:/ ...
- tcp协议以及socket介绍
壹:tcp协议:可靠传输 一: 3次握手,建立链接:4次挥手,断开链接 3次握手,建立链接:图解 ,这样双向通路就建立完成了. 在建立链接时,并没有数据传输,所以中间两部可以合在一起,也就是3次握手, ...
- ssm整合(方案一 引入jar)
最近为了研究redis整合,基本都是ssm+redis 好吧 我是老古董了,以前都是ssi,那就折腾一下ssm先,具体方案: 方案一:基本引入jar版.方案二:maven版(后续继续整) 这篇主要是通 ...