Java实用工具类
java.util.Arrays类(操作数组)
1.boolean equals(int[],int[])
2.String toString(int[])
3.void fill(int[] a,int fromIndex,int toIndex,int val)
4.void sort(int[] a)
5.int binarySearch(int[] a,int key)
6.int[] copyOf(int[],int newLength)
java.util.Arrays类(操作数组)
使用前的准备:导包
import java.util.Arrays;
1.boolean equals(int[],int[])
boolean equals(int[],int[])方法:
可以用于判断两个数组是否相等,返回值是布尔类型(true或false)
案例:
import java.util.Arrays; /** * @author .29. * @create 2022-09-11 11:34 */ public class ArraysTool { public static void main(String[] args) { int[] arr1 = new int[]{1,2,3,4,5,6}; int[] arr2 = new int[]{1,2,3,4,5,6}; int[] arr3 = new int[]{1,4,3,2,5}; int[] arr4 = arr1; int[] arr5 = new int[]{}; int[] arr6 = new int[]{}; //与相等数组比较 boolean eql1 = Arrays.equals(arr1,arr2); //与不相等数组比较 boolean eql2 = Arrays.equals(arr1,arr3); //数组与本身比较 boolean eql3= Arrays.equals(arr1,arr4); //与空数组比较 boolean eql4= Arrays.equals(arr1,arr5); //两个空数组比较 boolean eql5= Arrays.equals(arr5,arr6); System.out.println("与相等数组比较:"+eql1); System.out.println("与不等数组比较:"+eql2); System.out.println("数组与本身比较:"+eql3); System.out.println("与空数组的比较:"+eql4); System.out.println("两个空数组比较:"+eql5); } }
控制台输出:
2.String toString(int[])
String toString(int[])方法,可以用来输出数组,将数组转化成字符串,返回值是String类型。
案例:
import java.util.Arrays; /** * @author .29. * @create 2022-09-11 11:34 */ public class ArraysTool { public static void main(String[] args) { int[] arr = new int[]{1,2,3,4,5,6}; int[] arr1 = new int[]{}; int[] arr2 = null; System.out.println(Arrays.toString(arr)); System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); } }
控制台输出:
3.void fill(int[] a,int fromIndex,int toIndex,int val)
void fill(int[] a,int fromIndex,int toIndex,int val) 方法,可以用来将指定的值填入到数组当中,没有返回值(返回值为空)。
注意:该方法用于填充覆盖原有的元素,不能用于增添元素,否则出现数组下标越界异常(java.lang.ArrayIndexOutOfBoundsException)
案例:
import java.util.Arrays; /** * @author .29. * @create 2022-09-11 11:34 */ public class ArraysTool { public static void main(String[] args) { int[] arr = new int[]{1,2,3,4,5,6}; int a = 29; int b = 24; //(int[],int)不指定下标,完全填充 Arrays.fill(arr,a); System.out.println(Arrays.toString(arr)); //(int[],int fromIndex,int toIndex,int)指定下标 // 从fromIndex到toIndex前的元素被填充 Arrays.fill(arr,1,2,b); Arrays.fill(arr,4,6,24); //输出 System.out.println(Arrays.toString(arr)); //以下情况为不填充 Arrays.fill(arr,1,1,b); Arrays.fill(arr,2,2,b); Arrays.fill(arr,3,3,b); } }
控制台输出:
4.void sort(int[] a)
void sort(int[] a)方法,可用来对数组进行排序,返回值为空(没有返回值)。
案例:
LeetCode原题链接:最小K个数
题目:面试题 17.14. 最小K个数
题目描述:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。 示例: 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4]
实现代码:
class Solution { public int[] smallestK(int[] arr, int k) { //开辟空间,用于存放最小k个数 int[] nums = new int[k]; //调用Arrays工具类的sort()方法,排序数组。 Arrays.sort(arr); //将排序好数组的前k个数复制到开辟的空间中 for(int i = 0;i < k; ++i){ nums[i] = arr[i]; } //返回 return nums; } }
提交结果:
5.int binarySearch(int[] a,int key)
int binarySearch(int[] a,int key)方法,用于对排序好的数组进行二分法查找指定的值,返回查找到指定值的下标。
案例:
import java.util.Arrays; /** * @author .29. * @create 2022-09-11 11:34 */ public class ArraysTool { public static void main(String[] args) { int[] arr = new int[]{1,2,3,4,5,6,7,8}; int a = Arrays.binarySearch(arr,1); int b = Arrays.binarySearch(arr,2); int c = Arrays.binarySearch(arr,3); int d = Arrays.binarySearch(arr,4); int e = Arrays.binarySearch(arr,5); int f = Arrays.binarySearch(arr,6); int g = Arrays.binarySearch(arr,7); int h = Arrays.binarySearch(arr,8); System.out.println(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h); //未排序 int[] arr1 = {4,8,6,1,3,2,5,7}; a = Arrays.binarySearch(arr1,1); b = Arrays.binarySearch(arr1,2); c = Arrays.binarySearch(arr1,3); d = Arrays.binarySearch(arr1,4); e = Arrays.binarySearch(arr1,5); f = Arrays.binarySearch(arr1,6); g = Arrays.binarySearch(arr1,7); h = Arrays.binarySearch(arr1,8); System.out.println(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h); } }
控制台输出:
未排序数组使用binarySearch(int[] a,int key)方法效果不理想。
6.int[] copyOf(int[],int newLength)
copyOf()方法用于复制一个数组,可以指定返回数组的长度。
案例(与sort()方法案例一致):
void sort(int[] a)方法,可用来对数组进行排序,返回值为空(没有返回值)。
案例:
LeetCode原题链接:最小K个数
题目:面试题 17.14. 最小K个数
题目描述:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。 示例: 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4]
实现代码:
class Solution { public int[] smallestK(int[] arr, int k) { //调用Arrays工具类的sort()方法,排序数组。 Arrays.sort(arr); //将排序好的数组复制一份副本,指定副本长度为k int[] nums = Arrays.copyOf(arr,k); //返回 return nums; } }
题解结果:
补充:如果返回数组的指定长度newLength长度大于被拷贝数组长度,多出来的位置会被0替代。
案例:
import java.util.Arrays; /** * @author .29. * @create 2022-09-11 11:34 */ public class ArraysTool { public static void main(String[] args) { int[] arr2 = {29,29,29,29,29}; int[] ints = Arrays.copyOf(arr2, 10); System.out.println(Arrays.toString(ints)); } }
控制台输出:
总结:熟练使用工具类,可以减少代码量,有效提升工作效率,但是不要因此而忽略巩固基础。