Arrays常用API

Arrays常用API

本文主要总结了JAVA的Arrays工具类的常见使用方法,该工具类在机试刷题、面试过程中经常被问到,阅读完建议自己实践实践。

1.常见API:

java 复制代码
1 Arrays.toString()  //输出数组的内容(基本数据类型)

2 Arrays.sort(arr); //排序,默认是升序

3 Arrays.binarySearch(int[] a, int key)//前提数组是有序的
//元素存在返回索引号.如果元素不存在返回的规则为:负的(要找的元素应该出现的索引位置+1)

4 Arrays.asList()
//返回的列表元素不能进行删除和添加元素,因此可以在其前面加上new ArrayList<>( ** )

5 Arrays.fill(arr, val) //填充数组
6 Arrays.copyOf(arr, length) //数组的复制:返回的是一个新的数组对象
第一个变量表示原来的数组对象.第二个变量表示新的数组的长度,如果新数组的长度超过原数组的长度,保留数组元素的默认基本类型的值。

2. 重要方法讲解

2.1 Arrays.sort()

底层原理是插入排序 + 快速排序 + 归并排序,具体规则为:

html 复制代码
 1. 数组长度小于47 插入排序
 2. 数组长度在[47, 286] 快速排序(双基准, 三路快排)
 3. 数组长度大于286 归并排序

底层:数组长度小于int QUICKSORT_THRESHOLD = 286 286这个阈值时,且大于int

INSERTION_SORT_THRESHOLD = 47

47是,采用的就是快速排序了,小于47就采用插入排序。长度大于286后,就会采用归并排序了。

参考:https://blog.csdn.net/Azir_/article/details/119250369

2.2 Arrays.stream()

使用 Arrays.stream() 方法可以将数组转换为流,然后就可以对数组中的元素进行各种操作,例如过滤,映射,排序等。

https://blog.csdn.net/m0_61594817/article/details/128716814

Arrays.stream() 函数可以将数组转换为流,使用流API可以更简洁的处理数组中的数据,在大量数据的情况下可以提高性能。

方法:

https://blog.csdn.net/weixin_52279910/article/details/125543330

总:https://blog.csdn.net/weixin_42421269/article/details/121703730

2.3 Arrays.binarySearch(int[] a, int key)

元素存在返回索引号;如果元素不存在返回的规则为:负的(要找的元素应该出现的索引位置+1

java 复制代码
//排完序为[3, 4, 11, 20, 59]	
	System.out.println(Arrays.binarySearch(arr,4 ));//返回1
	System.out.println(Arrays.binarySearch(arr, 9)); //返回-3
	System.out.println(Arrays.binarySearch(arr, 100));//返回-6

2.4 Arrays.copyOf()

数组的复制:返回的是一个新的数组对象

第一个变量表示原来的数组对象.第二个变量表示新的数组的长度,如果新数组的长度超过原数组的长度,保留数组元素的默认基本类型的值。

java 复制代码
 int[] arr1 = {1, 2, 3, 4, 5}; 
    int[] arr2 = Arrays.copyOf(arr1, 5);
    int[] arr3 = Arrays.copyOf(arr1, 10);
    for(int i = 0; i < arr2.length; i++) 
        System.out.print(arr2[i] + " "); 
    System.out.println();
    for(int i = 0; i < arr3.length; i++) 
        System.out.print(arr3[i] + " ");
//输出
1 2 3 4 5 
1 2 3 4 5 0 0 0 0 0  

2.5 Arrays.asList()

Arrays.asList()方法可以将数组元素转换为list元素。(使用过程记得加上new ArrayList<>( Arrays.asList( ) );)

java 复制代码
String[] myArray = { "Apple", "Banana", "Orange" }; 
List<String> myList = Arrays.asList(myArray);
//或者
List<String> myList = Arrays.asList("Apple", "Orange");
 //myList.add("Guava"); 
 //java.lang.UnsupportedOperationException 异常!
 //这一异常意味着,向 myList 添加新元素是不被允许的;如果试图从 myList 中删除元素,也会抛出相同的异常。

注意:

1.生成的list元素是不可变的列表,不可以进行添加或者删除元素

2.不支持基本数据类型数组的转换

解决方案:

1创建真正的LIst对象

java 复制代码
  String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = new ArrayList<String>(Arrays.asList(myArray));

2创建list,然后遍历整个数组

https://www.jianshu.com/p/2b113f487e5e

https://blog.csdn.net/Duuuhs/article/details/89739358

相关推荐
卓码软件测评10 分钟前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
Lionel_SSL4 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛4 小时前
手搓Springboot
java·spring boot·spring
Greedy Alg4 小时前
LeetCode 142. 环形链表 II
算法
睡不醒的kun4 小时前
leetcode算法刷题的第三十二天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
老华带你飞4 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
独行soc4 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
脑子慢且灵5 小时前
[JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
java·后端·servlet·tomcat·intellij-idea·web
先做个垃圾出来………5 小时前
残差连接的概念与作用
人工智能·算法·机器学习·语言模型·自然语言处理
华仔啊6 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端