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. The Code analysis of the FFDNet model

    1. 读取图像并判断是否为灰度图,如为RGB图转化为灰度图,并读取图像的w.h 2.数据格式转换:将uint8表示的读取图像矩阵变为double表示. 3.加入噪声,如果噪声水平$\sigma = 5 ...

  2. 51Nod 1010 只包含因子2 3 5的数

    K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...

  3. Android 性能优化之内存泄漏检测以及内存优化(中)

    https://blog.csdn.net/self_study/article/details/66969064 上篇博客我们写到了 Java/Android 内存的分配以及相关 GC 的详细分析, ...

  4. JAVA值传递之基本数据类型和引用数据类型

    #1.基本数据类型值传递 package 经典小Demo.值传递; public class Test { public static void main(String[] args) { int a ...

  5. 自制操作系统Antz(1)——Boot Sector

    0.引子 最近在看操作系统底层方面的东西,最开始的为什么是07c00h这个问题就让我对操作系统有了很大的兴趣.所以准备在看书之余顺便写一个操作系统(Anz).至于为什么这个系统会被叫做Antz,可以参 ...

  6. Dockerfile文件详解

    什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...

  7. java servlet练习测试

    步骤: 0.首先创建web project,工程名:test_servlet 1.编写Servlet,TestServlet.java文件内容: package com.ouyang.servlet; ...

  8. linux存储管理之文件系统

    EXT3/4文件系统 ====================================================================================Ext3: ...

  9. laravel orwhere的使用

  10. Win10下安装zio

    0x00 报错:capstone.dll缺失,就算用pip安装也不行. 推荐:kali下安装pwn,pwntools,zio