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后,就会采用归并排序了。
2.2 Arrays.stream()
使用 Arrays.stream() 方法可以将数组转换为流,然后就可以对数组中的元素进行各种操作,例如过滤,映射,排序等。
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,然后遍历整个数组