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

相关推荐
wei3872452322 分钟前
java练习2
java·开发语言·python
菜还不练就废了29 分钟前
数据结构|并查集
数据结构·算法
heyCHEEMS38 分钟前
[USACO09OCT] Bessie‘s Weight Problem G Java
java·开发语言·算法
凢en40 分钟前
NOC科普一
网络·笔记·算法·智能路由器·硬件工程
RanceGru1 小时前
C++——调用OpenCV和NVIDIA Video Codec SDK库实现使用GPU硬解码MP4视频文件
c++·opencv·算法·gpu算力·视频编解码
点云SLAM1 小时前
C++ 中自主内存管理 new/delete 与 malloc/free 完全详解
c++·算法·指针·内存管理·new/delete·malloc/free·内存地址
兔子蟹子1 小时前
JAVA中Spring全局异常处理@ControllerAdvice解析
java·spring
prinrf('千寻)1 小时前
项目右键没有add as maven project选项
java·maven
工业互联网专业1 小时前
基于springboot+vue的健康健身追踪系统
java·vue.js·spring boot·毕业设计·源码·课程设计·健康健身追踪系统
元亓亓亓1 小时前
LeetCode热题100--53.最大子数组和--中等
数据结构·算法·leetcode