数组工具类——Arrays
程序员文章站
2024-03-05 23:31:37
...
下面方法的参数都填的int只是举例方便,其实任何数据类型都可以。
在Arrays中使用的方法基本都是静态方法。
将数组转换成字符串 toString()
public static String toString(int[] a)
示例:
int[] a = { 10, 20, -30, 40, 70, -50, 50, 90, 0 };
int[][] b = { { 1, 2 }, { 1 }, { 1, 3, 4 } };
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
结果:
[10, 20, -30, 40, 70, -50, 50, 90, 0]
[[[email protected], [[email protected], [[email protected]]
数组排序 sort()
public static void sort(int[] a);
public static void sort(int[] a, int fromIndex, int toIndex);
sort()方法支持7种基本数据类型(除了boolean),同时也支持Object和Comparator(比较器)
第一种使用方式对数组所有元素按升序顺序排序,第二种使用方式是对数组[fromIndex,toIndex) 区域内的数据按升序排序。
示例:
int[] arr1 = { 10, 20, -30, 40, 70, -50, 50, 90, 0 };
int[] arr2 = { 10, 20, -30, 40, 70, -50, 50, 90, 0 };
Arrays.sort(arr1);
Arrays.sort(arr2, 3, 8);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
结果:
[-50, -30, 0, 10, 20, 40, 50, 70, 90]
[10, 20, -30, -50, 40, 50, 70, 90, 0]
填充替换数组元素 fill()
public static void sort(int[] a, int val);
public static void sort(int[] a, int fromIndex, int toIndex, int val);
第一种方法是将数组全部用val填充or替换;第二种方法是将数组[fromIndex,toInde)区域内的元素用val填充or替换。
int[] arr1 = { 10, 20, -30, 40, 70, -50, 50, 90, 0 };
int[] arr2 = { 10, 20, -30, 40, 70, -50, 50, 90, 0 };
Arrays.fill(arr1, 1);
Arrays.fill(arr2, 3, 8, 1);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
结果:
[1, 1, 1, 1, 1, 1, 1, 1, 1]
[10, 20, -30, 1, 1, 1, 1, 1, 0]
数组复制 copyOf()和copyOfRange()
copyOf()
int[] java.util.Arrays.copyOf(int[] original, int newLength)
第一个参数 original 是原数组,第二个参数newLength是需要复制多少个元素(返回的新数组的长度)
功能:
复制原数组从索引0开始newLength个元素
这个方法源代码中其实就是System.arraycopy()实现的。
int[] arr1 = Arrays.copyOf(c, len);
int[] arr2 = Arrays.copyOf(c, 5);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
[10, 20, -30, 40, 70, -50, 50, 90, 0]
[10, 20, -30, 40, 70]
copyOfRange()方法
public static int[] copyOfRange(int[] original, int from, int to)
复制原数组索引在[form,to)内的元素
int[] arr1 = Arrays.copyOfRange(c, 1, len / 2);
System.out.println(Arrays.toString(c));
System.out.println(Arrays.toString(arr1));
[10, 20, -30, 40, 70, -50, 50, 90, 0]
[20, -30, 40]
数组二分搜索查询 binarySearch()
public static int binarySearch(int[] a, int key)
public static int binarySearch(int[] a, int fromIndex, int toIndex, int key)
int[] arr1 = { 10, 20, -30, 40, 70, -50, 50, 90, 0 };
Arrays.sort(arr1);
int index1 = Arrays.binarySearch(arr1, 40);
int index2 = Arrays.binarySearch(arr1, 0, 4, 40);
System.out.println(Arrays.toString(arr1));
System.out.println(String.format("值为40的元素下标是:%d", index1));
System.out.println(String.format("值为40的元素下标是:%d", index2));
注意:使用binarySearch()之前一定要sort()对数组排序,因为二分搜索的要求是数组是有序的。
[-50, -30, 0, 10, 20, 40, 50, 70, 90]
值为40的元素下标是:5
值为40的元素下标是:-5
判断数组是否相等 equals
public static boolean equals(int[] a, int[] a2)
int[] a = {1,2,3,4,5};
int[] b = {1,2,3,4,5};
int[] c = {1,2,3,4,6};
System.out.println(Arrays.equals(a, b));
System.out.println(Arrays.equals(a, c));
true
false
上一篇: 单链表的基本操作