Java常用数据结构Arrays工具类

前面把 List, Set, Map 的结构梳理了一下,在 java 的容器体系下,还有两个非常重要的工具类 Collections, Arrays,本文主要梳理下 Arrays 类提供的方法。

排序

Arrays提供两种排序: sort和parallelSort。首先看下 sort 相关的函数:

640?wx_fmt=png

上图展示了 Arrays 提供的各种 sort 函数以及它的重载形式。 sort 可以排序的数组类型包括 int, long, short, char, byte, float, double 一共7种基本数据类型,在8基本类型中,除了 boolean 不能排序,都包含了。 sort 在对7中基本类型进行排序中,还可能会有 int 类型的第二个和第三个参数,分别表示排序开始的下标(包含)和结束的下标(不包含)。 sort 也可以对 Object 类型的数据进行排序,也可以对任意其他类型的数组进行排序,并且可以自定义排序时的 Comparator 。

640?wx_fmt=png

当数组元素的数量大于 MIN_ARRAY_SORT_GRAN 时, parallelSort 会把数组拆分为多个数组,然后对多个数组进行排序,最后将多个数组进行归并,最终得到排序结果。和 sort方法一样, parallelSort 除 boolean 以外的所有基本数据类型,并且支持任意其他类型,也支持自定义 Comparator 。

二元操作

640?wx_fmt=png

什么是二元操作,可以看下下面的 demo :

int [] arr = new int [] {1,2,3,4,5,6};	
Arrays.parallelPrefix(arr, new IntBinaryOperator() {	
    @Override	
    public int applyAsInt(int left, int right) {	
        // TODO Auto-generated method stub	
        System.out.println(left + "-" + right);	
        return left + right;	
    }	
});	
System.out.println(Arrays.toString(arr));	
1-2	
3-3	
6-4	
10-5	
15-6	
[1, 3, 6, 10, 15, 21]

可以看到 parallelPrefix 提供了 IntBinarryOperator 接口接口的 applyAsInt 提供了 left , right 参数,根据 left 和 right 参数对数组进行修改,修改完成后将结果写入原数组。二元操作可以对 long, int, double 类型的数组进行操作,也可以对任意其他类型的数组进行操作,而且可以提供数组操作的下标范围。

二分查找

640?wx_fmt=png 

Arrays 可以对除 boolean 的基本类型数据进行二分查找,可以对任意类型的数组进行二分查找,且可以指定二分查找的下标范围。对于非基本类型的数组,可以自定义 Comparator 。

数据填充

640?wx_fmt=png

可以使用 fill 接口将数组指定的下标位置的元素设置为指定的值。

拷贝

640?wx_fmt=png 

copyOf 将源数组从下标0开始,拷贝指定数量的元素并返回新的数组; copyRangeOf 将元素从指定下标范围的元素中拷贝指定数量个元素并返回新的数组。

分割迭代

640?wx_fmt=png

Spliterator 就是为了并行遍历元素而设计的一个迭代器,可以查看之前的文章:

https://mp.weixin.qq.com/s/lE7a1oP4jVdDe8T13GXHbA

Stream

640?wx_fmt=png

对数组进行流式处理,可用一切流式处理的方法,后面会写一篇文章分析 stream 操作。

总结

Arrays 主要提供了排序,二元操作,二分查找,数据填充,拷贝,分割迭代,流式处理操作。文章只是介绍了功能,并没有详细说明,后续会写两篇文章,分别分析分割迭代和流式处理。

--END--

识别二维码,关注我们

640?wx_fmt=png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值