Java程序员的日常—— Arrays工具类的使用
这个类在日常的开发中,还是非常常用的。今天就总结一下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工具类的使用的更多相关文章
- Java程序员的日常—— FileUtils工具类的使用
package cn.xingoo.learn.commons; import org.apache.commons.io.FileUtils; import org.apache.commons.i ...
- Java程序员的日常——经验贴(纯干货)
工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...
- java中的数组的Arrays工具类的使用
package day04.d1.shuzu; import java.util.Arrays; /** * Arrays 工具类 * @author Administrator * */public ...
- Java程序员的日常—— 《编程思想》关于类的使用常识
Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...
- Java程序员的日常 —— 《编程思想》持有对象
集合框架可以说是Java里面必备的知识点了,日常的使用中也会遇到各种情况需要使用到集合.下面就简单介绍下各种集合的使用场景: List List可以看做是数组,实现的方式有两种: ArrayList ...
- Java程序员的日常—— Properties文件的读写
在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...
- 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。
返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...
- Java程序员的日常—— IOUtils总结
以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTils都有 ...
- Java程序员的日常—— 垃圾回收中引用类型的作用
在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...
随机推荐
- Unity Container 应用示例
一 项目引用Unity 右键项目引用-> 管理Nuget包->搜索unity->安装Unity 和 Unity Interception Extension,如下图所示. 二 创建基 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- Javascript高级程序设计——基本包装类型
既然js中的基本类型没有属性和方法那么为什么对字符串进行subString()方法可以呢?基本类型不应该没有方法的吗? 这就是基本包装类型啦! ECMAScript提供了三个特殊的引用类型,Boole ...
- MyBatis知多少(3)
解决存储过程固有限制的方法之一就是将SQL嵌入到更加通用的语言中去.与存储过程将业务逻辑移入数据库相反,内联SQL将SQL从数据库移入了应用程序代码.这就使得SQL语句可以直接与语言进行交互.从某种意 ...
- 第 7 章 门面模式【Facade Pattern】
以下内容出自:<<24种设计模式介绍与6大设计原则>> 好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内 ...
- 【leetcode】Single Number II
int singleNumber(int A[], int n) { int once = 0; int twice = 0; int three = 0; for (int i = 0; i < ...
- js框架——angular.js
这是一个前端用的框架,使用简单.详细介绍这里就不写了,主要介绍其语法和作用—— 1. 声明一个angular 如果想要使用一个angular代码,则需要在[想要使用angular的范围内写上ng-ap ...
- 解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题
一.起因 这几天在做电子签章问题,要通过替换docx文件中的占位符生成包含业务数据的合同数据,再转换成html文件,转换成pdf文件.遇到的问题是:通过apache poi转换docx到html时,原 ...
- subprocess 模块
import subprocess # 就用来执行系统命令 import os cmd = r'dir D:\上海python全栈4期\day23 | findstr "py"' ...
- [转]awsome-python
原文链接 Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Pytho ...