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 ...
随机推荐
- PostgreSQL在Update时使用Substring函数截取字符串并且加上CASE WHEN THEN条件判断
--更新 UPDATE wp_order_detail SET layout_type = ( SELECT CASE THEN ) ELSE '' END FROM wp_catalog_size ...
- 使用JS调用手机本地摄像头或者相册图片识别二维码/条形码
接着昨天的需求,不过这次不依赖微信,使用纯js唤醒手机本地摄像头或者选择手机相册图片,识别其中的二维码或者是条形码.昨天,我使用微信扫一扫识别,效果超棒的.不过如果依赖微信的话,又怎么实现呢,这里介绍 ...
- log4net:ERROR ConfigureFromXml called with null 'element' parameter
场景重现 ASP.NET Core 下集成 log4net 时, 运行时报错如下: log4net:ERROR ConfigureFromXml called with null 'element' ...
- Linux 软连接 (ln命令)
这是linux中一个非常重要命令.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目录,用到相同的文件 ...
- WebApi请求原理
一.路由: 1.首先执行Application_start 2 .注册路由 WebApiConfig,把路由规则写入一个容器 运行 请求会去容器匹配-找到控制器容器 一般不指定Action, rest ...
- 自己封装myLocalStorage,使其有有效期
项目中遇见 cookie 值存不上,what fuck?什么情况,不知道.用$.cookie 和原生的 cookie 都不行,存上值,就被删了一样.找不见地方.考虑到项目比较大,去找得代价,还不如换种 ...
- Java使用Sockt进行通信(2)
使用TCP协议编写Sockt TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. ...
- Python语法注意点
1. 在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字参数 ...
- SR-IOV虚拟机的MTU与物理网卡的MTU
在进行SR-IOV虚拟机MTU方面的测试时,出现如下情况: 1)物理网卡PF的MTU值是4000: root@compute-1:~# ip l|more1: lo: <LOOPBACK,UP, ...
- HTTP安全通信:Https和SSL
1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HT ...