这个类在日常的开发中,还是非常常用的。今天就总结一下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. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  2. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

  3. LeetCode-4MedianofTwoSortedArrays(C#)

    # 题目 4. Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m and n resp ...

  4. git 命令

    切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm  ...

  5. JavaScript动画-碰撞检测

    ▓▓▓▓▓▓ 大致介绍 碰撞检测是指在页面中有多个元素时,拖拽一个元素会出现碰撞问题,碰撞检测是以模拟拖拽和磁性吸附中的范围限定为基础的 效果:碰撞检测 ▓▓▓▓▓▓ 碰撞检测 先来看看碰撞检测的原理 ...

  6. 自己实现一个javascript事件模块

    nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...

  7. nodejs模块发布及命令行程序开发

    前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...

  8. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

    其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...

  9. JS魔法堂:不完全国际化&本地化手册 之 理論篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...

  10. Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

    在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...