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的更多相关文章

  1. JDK8源码解析 -- HashMap(二)

    在上一篇JDK8源码解析 -- HashMap(一)的博客中关于HashMap的重要知识点已经讲了差不多了,还有一些内容我会在今天这篇博客中说说,同时我也会把一些我不懂的问题抛出来,希望看到我这篇博客 ...

  2. JDK8源码阅读之Collection及相关方法

    最近面试总会被问到JDK8中的一些新特性,所以闲下来抽时间看了一下8的源码,目前主要看的是数据结构部分,特此记录一下. 新增函数式接口,实现该接口的可以直接用lambda表达式. default和st ...

  3. Jvm(jdk8)源码分析1-java命令启动流程详解

    JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...

  4. JDK8源码解析 --- Long 类型

    最近都在看JDK8的源码,想把记录下来与大家一起共享,每天 积累一点,每天成长一点.看了装箱Long类型,有好多以前没有注意到或者不知道的内容,慢慢懂得.废话不多说,直接上代码讲解... 1.缓存区L ...

  5. JDK8源码解析 -- HashMap(一)

    最近一直在忙于项目开发的事情,没有时间去学习一些新知识,但用忙里偷闲的时间把jdk8的hashMap源码看完了,也做了详细的笔记,我会把一些重要知识点分享给大家.大家都知道,HashMap类型也是面试 ...

  6. 使用 IDEA 查看 JDK8 源码

    使用 idea 查看 oracle jdk 8 源码时发现 Unsafe 没有源码. 解决方法: 到 openjdk-8 下载页面:http://jdk.java.net/java-se-ri/8-M ...

  7. java源码分析:Arrays.sort

    仔细分析java的Arrays.sort(version 1.71, 04/21/06)后发现,java对primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用 ...

  8. 深入JDK源码之Arrays类中的排序查找算法(转)

    原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...

  9. jdk源码剖析一:OpenJDK-Hotspot源码包目录结构

    开启正文之前,先说一下源码剖析这一系列,就以“死磕到底”的精神贯彻始终,JDK-->JRE-->JVM(以openJDK代替) 最近想看看JDK8源码,但JDK中JVM(安装在本地C:\P ...

随机推荐

  1. KNN算法 - 数据挖掘算法(3)

    (2017-04-10 银河统计) KNN算法即K Nearest Neighbor算法.这个算法是机器学习里面一个比较经典的.相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法 ...

  2. “==”和equals

    == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象.比较的是真正意义上的指针操作. 1.比较的是操作符两端的操作数是否是同一个对象.2.两 ...

  3. DataTable插件 后台分页 (服务器端分页)

    <script type="text/javascript">        var persontable; var personQueryCondition = { ...

  4. vim中^M的研究

    vim打开文件时在行尾显示^M,这样的情况时不时会遇到,下面稍微深入了解下这个问题: 原理呢,其实很简单:Windows换行风格(也叫dos风格)的文本以Unix风格解析就会出现这个情况: 首先重现这 ...

  5. opencv学习之路(22)、轮廓查找与绘制(一)

    一.简介 图2 二.代码 #include"opencv2/opencv.hpp" #include<iostream> using namespace std; us ...

  6. markdown的css样式(自己写的)

    markdown的css样式,这些是我自己配置的,感觉可以的话你可以添加下,不适合自己的话可以仿照第二种自己写个比较好的css样式. 第一种 /* RESET ==================== ...

  7. 解决github访问及上传慢的问题

    在本地host文件中添加映射 http://tool.chinaz.com/dns , 查询 github.global.ssl.fastly.net 和 assets-cdn.github.com ...

  8. pinpoint与zipkin的比较

    经过本周部署和测试pinpoint监控平台的工作,我对这套开源系统有了更进一步的认识. 初次见到pinpoint这套系统时,我被它各方面优秀的特征所折服:无需对项目代码进行任何改动就可以部署探针.追踪 ...

  9. (17)线程队列---queue LifoQueue PriorityQueue

    线程常用队列有: queue LifoQueue PriorityQueue 语法: 大致和进程队列语法一致 put 往队列当中放值,超过队列长度,直接加阻塞 get 如果获取不到加阻塞 put_no ...

  10. 使用Gitlab实现自动化部署与持续集成

    Gitlab-Ci运行原理: 由以下两个模块组成gitlab-ci servergitlab-ci-runner其中,gitlab-ci server负责调度.触发Runner,以及获取返回结果. 而 ...