Arrays的常用方法
Array中的方法
int[] arr = {4,23,75,34,6,432};
1.基础数据类型默认值为它的数据类型对应的默认值
int[] i2 = new int[6];
double[] d = new double[3];
char[] c = new char[3];
boolean[] b = new boolean[3];
System.out.println(Arrays.toString(i2)); //[0, 0, 0, 0, 0, 0]
System.out.println(Arrays.toString(d)); //[0.0, 0.0, 0.0]
System.out.println(Arrays.toString(c)); //[ , , ]
System.out.println(Arrays.toString(b)); //[false, false, false]
2.引用数据类型,默认为null
String[] s1 = new String[5];
StringTest[] s2 = new StringTest[3];
System.out.println(Arrays.toString(s1)); //[null, null, null, null, null]
System.out.println(Arrays.toString(s2)); //[null, null, null]
3.Array中的方法(不常用)
Class clazz = Class.forName("java.lang.String");
//newInstance 通过反射获取到class创建数组 jdk9后不建议使用
Object newInstance = Array.newInstance(clazz, 3);
//set 设置数组中的值
Array.set(newInstance, 1, "hello");
//get 获取到数组中的值,注意数据类型要和数组中一致
Object object = Array.get(newInstance, 1);
System.out.println(object); //hello
System.out.println("----------------------------");
/**
* Arrays的方法
*/
4.asList 把数组转为集合,注意此集合为arrays的内部类
//基本数据类型是无法泛型化的,所以int的数组返回的是个包含数组的集合
List<int[]> asList = Arrays.asList(arr);
Iterator<int[]> iterator = asList.iterator();
while (iterator.hasNext()) {
System.out.println(Arrays.toString(iterator.next())); //[4, 23, 75, 34, 6, 432]
}
System.out.println("---------------------");
Integer[] arr2 = {4,23,75,34,6,432};
//注意:此时返回的list为Arrays的内部类,不是java.util.ArrayList,没有add,remove等方法
List<Integer> asList2 = Arrays.asList(arr2);
System.out.println(asList2); //[4, 23, 75, 34, 6, 432]
arr2[0] = 999;
//返回的这个list指向的还是原数组
System.out.println(asList2); //[999, 23, 75, 34, 6, 432]
List<Integer> list = new ArrayList<Integer>(Arrays.asList(arr2));
System.out.println(list); //[999, 23, 75, 34, 6, 432]
list.add(11);
list.add(22);
System.out.println(list); //[999, 23, 75, 34, 6, 432, 11, 22]
System.out.println("-------------------------");
5.binarySearch 二分法查找有序数组中的元素
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2)); //[6, 23, 34, 75, 432, 999]
int binarySearch = Arrays.binarySearch(arr2,432);
System.out.println(binarySearch); //4
6.copyOf 从0开始复制固定长度的数组,如果长度超过数组长度添加默认值到后面(0,false,null...)
Integer[] copyOf = Arrays.copyOf(arr2, 3);
System.out.println(Arrays.toString(copyOf)); //[6, 23, 34]
System.out.println(Arrays.toString(Arrays.copyOf(arr2, 7))); //[6, 23, 34, 75, 432, 999, null]
7.copyOfRange(arr2, 1, 4) 从1开始复制4-1 长度为3的数组,数组长度超过同上
Integer[] copyOfRange = Arrays.copyOfRange(arr2, 1, 4);
System.out.println(Arrays.toString(copyOfRange)); //[23, 34, 75]
8.equals 两个完全一样的数组返回true,但都为空时返回false,只能比较一维数组
int[] arr3 = {4,23,75,34,6,432};
boolean equals = Arrays.equals(arr, arr3);
System.out.println(equals); //true
9.deepEquals 比较多维数组,基本数据类型的一维数组不能使用此方法
int[][] arr4 = {{75, 432, 999},{75, 432, 999},{75, 432, 999}};
int[][] arr5 = {{75, 432, 999},{75, 432, 999},{75, 432, 999}};
boolean deepEquals = Arrays.deepEquals(arr5, arr4);
System.out.println(deepEquals); //true
boolean equals2 = Arrays.equals(arr5, arr4);
System.out.println(equals2); //false
System.out.println("-------------------------------");
10.deepToString 多维数组的toString方法
String deepToString = Arrays.deepToString(arr5);
String string = Arrays.toString(arr5);
System.out.println(deepToString); //[[75, 432, 999], [75, 432, 999], [75, 432, 999]]
System.out.println(string); //[[I@6d06d69c, [I@7852e922, [I@4e25154f]
11.deepHashCode 多维数组的hashCode
int hashCode5 = Arrays.hashCode(arr5);
System.out.println(hashCode5); //651912296
int hashCode4 = Arrays.hashCode(arr4);
System.out.println(hashCode4); //-554115814
int deepHashCode5 = Arrays.deepHashCode(arr5);
System.out.println(deepHashCode5); //115472992
int deepHashCode4 = Arrays.deepHashCode(arr4);
System.out.println(deepHashCode4); //115472992
12.fill 将指定的值分配给指定的数组的每个元素。
int[] arr6 = {4,23,75,34,6,432};
Arrays.fill(arr6, 11);
System.out.println(Arrays.toString(arr6)); //[11, 11, 11, 11, 11, 11]
//fill(arr7,2,5,11) 将指定的值分配给指定的数组的指定范围的每个元素。
int[] arr7 = {4,23,75,34,6,432};
Arrays.fill(arr7,2,5,11);
System.out.println(Arrays.toString(arr7)); //[4, 23, 11, 11, 11, 432]