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

相关推荐
2的n次方_几秒前
二维费用背包问题
java·算法·动态规划
皮皮林551几秒前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.几秒前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七6 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian15112 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~14 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
.生产的驴16 分钟前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq
simple_ssn28 分钟前
【C语言刷力扣】1502.判断能否形成等差数列
c语言·算法·leetcode
v'sir30 分钟前
POI word转pdf乱码问题处理
java·spring boot·后端·pdf·word
寂静山林37 分钟前
UVa 11855 Buzzwords
算法