当前位置: 首页 > news >正文

Arrays工具类的常见方法总结

一、Arrays.asList( )

1、作用

Arrays.asList( )可以将一个数组以集合的形式传入一个集合对象。通常用来将一组元素全部添加到集合中。

2、参数及返回值

参数:一组动态参数

返回值:List<T>集合

3、应用举例

List<String> boyList=Arrays.asList("陈","杨","张","李");
ArrayList<String> list=new ArrayList<String>();
list.addAll(boyList);
System.out.println(list);

输出结果:[陈, 杨, 张, 李] 

4、源代码解读

        通过上图我们可知, Arrays.asList( )是通过创建一个ArrayList对象,然后将动态参数传入,并返回该集合。

二、Arrays.binarySearch( )

1、作用

Arrays.binarySearch( )方法可以在一个有序数组中,查找到目标元素

2、参数及返回值

参数一:目标数组

参数二:需要查找的元素

返回值:查找到的元素的下标-1

3、应用举例

当目标数组为有序数组时

int[] number= {2,4,5,7,8,9};//有序数组
int target=7;
int index1=Arrays.binarySerach(number,target);
System.out.println(target+"在位置"+index1);

输出结果:7在位置3 

当目标数组为无序数组时

int[] number1= {3,27,9,13,7};//无序数组
int target=7;
//先排序
Arrays.sort(number1);
System.out.println(Arrays.toString(number1));
//再查找
int index2=Arrays.binarySerach(number1,target);
System.out.println(target+"在位置"+index2);

输出结果:

[3, 7, 9, 13, 27]

7在位置1(是经过快速排序后的下标位置) 

4、源代码解读

        binarySearch()方法是调用了 binarySearch0()方法,low为0,high为数组a的长度减一,然后通过计算中间值(mid),再用中间值和目标元素相比较。

        若中间值大于目标值时,说明目标元素可能在目标数组的前半区,则将high赋为mid-1后继续计算中间值,以此循环,直到low<=high时,循环结束。若找到目标元素,则返回其下标,若没找到,则返回一个负数;

        若中间值小于目标值时,说明目标元素可能在目标数组的后半区,则将low赋为mid+1后继续计算中间值,以此循环,直到low<=high时,循环结束。若找到目标元素,则返回其下标,若没找到,则返回一个负数;

三、System.arraycopy( )

1、作用

System.arraycopy( )方法的作用是复制数组

2、参数

参数一:源数组

参数二:从源数组中开始复制的位置

参数三:目标数组

参数四:开始存储的位置

参数五:复制的长度

3、应用举例

int[] number={0,4,64,28,99,12};
int[] target=new int[number.length];
System.out.println("目标数组为:"+Arrays.toString(target));
System.arraycopy(number,0,target,0,number.length);
System.out.println("目标数组为:"+Arrays.toString(target));

输出结果:

目标数组为:[0, 0, 0, 0, 0, 0]
目标数组为:[0, 4, 64, 28, 99, 12] 

三、Arrays.copyOf( )

1、作用

Arrays.copyOf( )方法的作用是复制数组

2、参数及返回值

参数一:源数组

参数二:复制元素的个数

返回值:数组

3、应用举例

int[] number={0,4,64,28,99,12};
System.out.println("原数组为:"+Arrays.toString(number));
System.out.println("原数组地址为:"+number);//复制前三个元素
//从下标0开始复制三个元素
int[] arr1=Arrays.copyOf(number,3);
System.out.println("前三个元素为:"+Arrays.toString(arr1));
System.out.println("前三个元素地址为:"+arr1);//复制全部元素
int[] arr2=Arrays.copyOf(number,number.length);
System.out.println("全部元素为:"+Arrays.toString(arr2));
System.out.println("全部元素地址为:"+arr2);

输出结果:

原数组为:[0, 4, 64, 28, 99, 12]
原数组地址为:[I@15db9742
前三个元素为:[0, 4, 64]
前三个元素地址为:[I@6d06d69c
全部元素为:[0, 4, 64, 28, 99, 12]
全部元素地址为:[I@7852e922 

4、源代码解读

         通过上图我们可以知道, Arrays.copyOf( )方法是通过创建一个以传入的参数二为长度的数组,然后通过System.arraycopy( )方法,从源数组下标为0的位置开始复制,复制到新创建的数组中,如果newLength小于源数组长度时,说明源数组的长度足够长,可以满足我们复制newLength个元素的需求;若newLength大于源数组长度时,说明源数组的长度不够,只能将源数组中的元素全部复制到新数组。然后返回新数组。 

四、Arrays.copyOfRange( )

1、作用

Arrays.copyOfRange( )方法可以复制指定区间的元素

2、参数及返回值

参数一:目标数组

参数二:开始复制的位置

参数三:截至位置

3、应用举例

//复制指定区间元素:从下标[2,4)
int[] number={0,4,64,28,99,12};
int[] arr3=Array.copyOfRange(number,2,4);
System.out.println("区间复制元素为:"+Arrays.toString(arr3));//[64, 28]
System.out.println("区间复制元素地址为:"+arr3);
//复制后五个元素
int[] arr4=Arrays.copyOfRange(number,1,number.length);
System.out.println("区间复制元素为:"+Arrays.toString(arr4));
System.out.println("区间复制元素地址为:"+arr4);

 输出结果:

区间复制元素为:[64, 28]
区间复制元素地址为:[I@15db9742
区间复制元素为:[4, 64, 28, 99, 12]
区间复制元素地址为:[I@6d06d69c

4、源代码解读

         通过上图我们可以知道,当开始复制的位置小于截止位置时,即newLength为负数时,抛出参数非法异常当newLength大于零时,通过System.arraycopy( )方法,从源数组下标为0的位置开始复制,复制到新创建的数组中,如果newLength小于源数组长度时,说明源数组的长度足够长,可以满足我们复制newLength个元素的需求;若newLength大于源数组长度时,说明源数组的长度不够,只能将源数组中的元素全部复制到新数组。然后返回新数组。 

五、Arrays.fill( )

1、作用

fill()方法可以将一个数组全部填充为目标值

2、参数及返回值

参数一:目标数组

参数二:填充的数字

返回值:无返回值

3、应用举例

//fill()方法
int[] number1 =new int[5];
System.out.println("填充前:"+Arrays.toString(number1));
Arrays.fill(number,-2);
System.out.println("填充后:"+Arrays.toString(number1));

输出结果:

填充前:[0, 0, 0, 0, 0]
填充后:[-2, -2, -2, -2, -2]

int[] number2={1,2,3,4,5};
System.out.println("填充前:"+Arrays.toString(number2));
Arrays.fill(number2,-2);
System.out.println("填充后:"+Arrays.toString(number2));

 输出结果:

填充前:[1, 2, 3, 4, 5]
填充后:[-2, -2, -2, -2, -2]

4、源代码解读

        通过上图我们可以知道,Arrays.fill()方法是通过for循环来遍历数组(参数1(a)),逐个取出数组中的元素,并将它们赋值为我们需要填充的数字(参数2(val))。

六、Arrays.sort( )

1、作用

Arrays.sort( )可以快速对一个数组进行排序

2、参数及返回值

参数:一个需要排序的数组

返回值:无返回值

3、应用举例

int[] number1= {3,27,9,13,7};//无序数组
Arrays.sort(number1);
System.out.println(Arrays.toString(number1));

输出结果:[3, 7, 9, 13, 27] 

4、源代码解读

 

 

 

七、Arrays.toString( )

1、作用

Arrays.toString( )方法可以将数组以[ num1, num2 , num3, num4]的格式输出

2、参数及返回值

参数:一个需要输出的数组

返回值:字符串

3、应用举例

int[] array={1,2,3,4,5};
System.out.println(array);
System.out.println(Arrays.toString(array));

输出结果:

[I@15db9742
[1, 2, 3, 4, 5] 

4、源代码解读

 

相关文章:

  • 高校疫情防控系统的全栈开发实战
  • Day37 贪心算法part06
  • Acwing 周赛143 解题报告 | 珂学家 | 状压DP
  • 信息学奥赛一本通1177:奇数单增序列
  • DS:二叉树的顺序结构及堆的实现
  • MATLAB | 情人节画个花瓣venn图?
  • 002 - Hugo, 自动部署博客
  • Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试
  • 关于Build Your Own Botnet的尝试
  • 如何用 ChatGPT 做项目管理?
  • 吴恩达机器学习全课程笔记第一篇
  • 第十五章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 方法和属性
  • C# CAD SelectionFilter下TypedValue数组
  • N叉树的层序遍历
  • borb,一个好用的 Python 库!
  • (三)从jvm层面了解线程的启动和停止
  • 【个人向】《HTTP图解》阅后小结
  • crontab执行失败的多种原因
  • Django 博客开发教程 8 - 博客文章详情页
  • ES6系统学习----从Apollo Client看解构赋值
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • HTTP中GET与POST的区别 99%的错误认识
  • Kibana配置logstash,报表一体化
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vue.js源码(2):初探List Rendering
  • webpack+react项目初体验——记录我的webpack环境配置
  • XForms - 更强大的Form
  • 测试开发系类之接口自动化测试
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 问题之ssh中Host key verification failed的解决
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #1015 : KMP算法
  • #数学建模# 线性规划问题的Matlab求解
  • (0)Nginx 功能特性
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)原始图像数据和PDF中的图像数据
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Micro Framework初体验(二)
  • .NET 命令行参数包含应用程序路径吗?
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET构架之我见
  • .NET连接MongoDB数据库实例教程
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Async注解的坑,小心