这个类在日常的开发中,还是非常常用的。今天就总结一下Arrays工具类的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入学习下Arrays的排序算法,这个还是非常有用的。

所有的方法都是在下面的类中进行测试的:

  1. public class ArraysTest {
  2. String[] array = new String[]{"a","c","2","1","b"};
  3. Integer[] ints = new Integer[]{5,1,4,3,2};
  4. ...
  5. }

asList

这个方法可以把数组转换成List,List提供了很多的操作方法,更便于使用。

  1. @Test
  2. public void test1(){
  3. List<String> lists = Arrays.asList(array);
  4. }

sort排序和parallelSort并行排序

sort比较常用了,根据元素按照自然排序规则排序,也可以设置排序元素的起始位置。

  1. @Test
  2. public void sort(){
  3. /* Arrays.sort(array);
  4. for(String str : array){
  5. System.out.println(str);
  6. }*/
  7. Arrays.sort(array,2,5);
  8. System.out.println(Arrays.deepToString(array));//[a, c, 1, 2, b]
  9. }

parallelSort则采用并行的排序算法排序.但是我自己测试,可能数据量太小,速度上并没有明显的变化。

binarySearch

查找目标元素所在的位置,注意需要先进行排序。

  1. @Test
  2. public void binarySearch(){
  3. //binarySearch需要保证是排好序的
  4. System.out.println(Arrays.binarySearch(array,"c"));//-6
  5. Arrays.sort(array);
  6. System.out.println(Arrays.binarySearch(array,"c"));//4
  7. }

copyOf

拷贝数组,第一种用法,如果目标长度不够,会使用0进行补位。第二种用法,支持拷贝目标起始位置到结束为止的数组。

  1. @Test
  2. public void copyOf(){
  3. //如果位数不够,需要补位
  4. Integer[] result = Arrays.copyOf(ints,10);
  5. for(int i : result){
  6. System.out.println(i);
  7. }
  8. System.out.println("----------------------------------------->");
  9. //如果位数够,就取最小的数组
  10. result = Arrays.copyOf(ints,3);
  11. for(int i : result){
  12. System.out.println(i);
  13. }
  14. System.out.println("----------------------------------------->");
  15. //
  16. result = Arrays.copyOfRange(ints,2,4);
  17. for(int i : result){
  18. System.out.println(i);
  19. }
  20. }

deepEquals深度比较、deepHashCode生成hashcode、deepToString深度打印

这几个方法基本都是采用递归的写法使用。

  1. @Test
  2. public void deepTest(){
  3. String[] array2 = new String[]{"a","c","2","1","b"};
  4. System.out.println(Arrays.deepEquals(array,array2));//深度比较两个数组是否相同
  5. System.out.println(Arrays.deepHashCode(array));
  6. System.out.println(Arrays.deepHashCode(array2));//如果两个数组deepEquals,那么他们的hashcode一定相同
  7. //格式化输出数组
  8. System.out.println(Arrays.deepToString(array));
  9. }

equals比较

对比两个数组是否相等

  1. @Test
  2. public void equals(){
  3. String[] array2 = new String[]{"a","c","2","1","b"};
  4. //1 对比引用是否相同
  5. //2 对比是否存在null
  6. //3 对比长度是否相同
  7. //4 挨个元素对比
  8. System.out.println(Arrays.equals(array,array2));
  9. }

fill

基于目标元素填充数组

  1. @Test
  2. public void fill(){
  3. Arrays.fill(array,"test");
  4. System.out.println(Arrays.deepToString(array));//[test, test, test, test, test]
  5. }

toString

打印数组元素

  1. @Test
  2. public void string(){
  3. System.out.println(Arrays.toString(array));//[a, c, 2, 1, b]
  4. }

toStream

把数组转换成stream,然后可以使用java8的stream特性了。

  1. @Test
  2. public void toStream(){
  3. Arrays.stream(array).forEach(s-> System.out.println(s));
  4. }

parallelPrefix

这个有点像spark的reduceByKey,即根据传入的方法一次计算:

  1. @Test
  2. public void parallelPrefix(){
  3. Arrays.parallelPrefix(ints,(x,y)->(x+y));
  4. System.out.println(Arrays.deepToString(ints));//[5, 6, 10, 13, 15]
  5. }

parallelSetAll

这个方法相当于stream.map会挨个元素遍历执行方法

  1. @Test
  2. public void parallelSetAll(){
  3. Arrays.parallelSetAll(ints,x->x*x);
  4. System.out.println(Arrays.toString(ints));//[0, 1, 4, 9, 16]
  5. }

setAll

这个方法与上面类似,只不过不是并行的

  1. @Test
  2. public void setAll(){
  3. Arrays.setAll(ints,x->x*2);
  4. System.out.println(Arrays.toString(ints));
  5. }

Java程序员的日常—— Arrays工具类的使用的更多相关文章

  1. Java程序员的日常—— FileUtils工具类的使用

    package cn.xingoo.learn.commons; import org.apache.commons.io.FileUtils; import org.apache.commons.i ...

  2. Java程序员的日常——经验贴(纯干货)

    工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...

  3. java中的数组的Arrays工具类的使用

    package day04.d1.shuzu; import java.util.Arrays; /** * Arrays 工具类 * @author Administrator * */public ...

  4. Java程序员的日常—— 《编程思想》关于类的使用常识

    Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...

  5. Java程序员的日常 —— 《编程思想》持有对象

    集合框架可以说是Java里面必备的知识点了,日常的使用中也会遇到各种情况需要使用到集合.下面就简单介绍下各种集合的使用场景: List List可以看做是数组,实现的方式有两种: ArrayList ...

  6. Java程序员的日常—— Properties文件的读写

    在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...

  7. 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。

    返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...

  8. Java程序员的日常—— IOUtils总结

    以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTils都有 ...

  9. Java程序员的日常—— 垃圾回收中引用类型的作用

    在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...

随机推荐

  1. CSS的未来

    仅供参考 前言 完成<CSS核心技术与实战>这本书,已有一个多月了,而这篇文章原本是打算写在那本书里面的,但本章讲解的内容,毕竟属于CSS未来的范畴,而这一切都还不能够确定下来,所以这一章 ...

  2. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  3. web前端基础知识

    #HTML    什么是HTML,和他ML...    网页可以比作一个装修好了的,可以娶媳妇的房子.    房子分为:毛坯房,精装修    毛坯房的修建: 砖,瓦,水泥,石头,石子....    精 ...

  4. 一道返回num值的小题目

    题目描述: 实现fizzBuzz函数,参数num与返回值的关系如下: .如果num能同时被3和5整除,返回字符串fizzbuzz .如果num能被3整除,返回字符串fizz .如果num能被5整除,返 ...

  5. Lambda

    Lambda Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LI ...

  6. var和dynamic的区别

    1.var 1.均是声明动态类型的变量. 2.在编译阶段已经确定类型,在初始化的时候必须提供初始化的值. 3.无法作为方法参数类型,也无法作为返回值类型. 2.dynamic 1.均是声明动态类型的变 ...

  7. MyBatis源码分析(二)语句处理器

    StatementHandler 语句处理器,主要负责语句的创建.参数的设置.语句的执行.不负责结果集的处理. Statement prepare(Connection connection, Int ...

  8. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  9. BPM配置故事之案例9-根据表单数据调整审批线路2

    老李:好久不见啊,小明. 小明:-- 老李:不少部门有物资着急使用,现在的审批流程太慢了,申请时增加一个是否加急的选项吧.如果选加急,金额1000以下的直接到我这里,我审批完就通过,超过1000的直接 ...

  10. 解决使用IE8打开ADFS 3.0登录页面

    系统上线前一天,发现客户竟然有XP系统和2003系统,这些系统都不能访问外网.测试时,客户端是IE8,打开我们系统ADFS的登录页面,一直在Loading,无法打开,也不报错.后来通过fiddler跟 ...