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

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

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

asList

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

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

sort排序和parallelSort并行排序

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

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

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

binarySearch

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

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

copyOf

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

    @Test
public void copyOf(){
//如果位数不够,需要补位
Integer[] result = Arrays.copyOf(ints,10);
for(int i : result){
System.out.println(i);
}
System.out.println("----------------------------------------->");
//如果位数够,就取最小的数组
result = Arrays.copyOf(ints,3);
for(int i : result){
System.out.println(i);
}
System.out.println("----------------------------------------->");
//
result = Arrays.copyOfRange(ints,2,4);
for(int i : result){
System.out.println(i);
}
}

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

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

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

equals比较

对比两个数组是否相等

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

fill

基于目标元素填充数组

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

toString

打印数组元素

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

toStream

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

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

parallelPrefix

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

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

parallelSetAll

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

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

setAll

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

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

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. Asp.net Boilerplate之AbpSession扩展

    当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...

  2. 数据库的快照隔离级别(Snapshot Isolation)

    隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而不会影响写操作申请的互斥锁(Exclusive Lock),隔离级 ...

  3. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

  4. App你真的需要么

    随着智能手机.移动路联网的普及,APP火的一塌糊涂,APP应用可谓五花八门,街上经常看到各种推广:扫码安装送东西,送优惠券.仿佛一夜之间一个企业没有自己的APP就跟不上时代了. 有时我在想:APP,你 ...

  5. 前端学HTTP之日志记录

    前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...

  6. javascript匹配各种括号书写是否正确

    今天在codewars上做了一道题,如下 看上去就是验证三种括号各种嵌套是否正确书写,本来一头雾水,一种括号很容易判断, 但是三种怎么判断! 本人只是个前端菜鸟,,不会什么高深的正则之类的. 于是,在 ...

  7. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  8. Javascript实用方法

    这篇我主要记录一些在工作中常用的.实用的方法. String trim 字符串方法中的trim主要用来去空格使用,很多时候,在后台做参数处理的时候,我们都会使用该方法,比如在获取用户输入的账户时 va ...

  9. vmware上网的方式

    vmware上网设置 vmware虚拟机上网设置 我的一些心得,如下: 如何使vmware虚拟机中的操作系统能够上网? 第一种情况: 主机使用PPPOE拨号上网 方法一:NAT方式 1.先关闭虚拟机中 ...

  10. BridgePattern(桥接模式)

    /** * 桥接模式 * @author TMAC-J * 应用于多维度方案 * 用组合的形式代替继承 * 符合单一职责原则 * 一个类只有一个引起他变化的原因 * 增加程序灵活性 */ public ...