Arrays类
Arrays类以属于java.util.包中,是专门操作数组的一个很强大的工具类,里面有大量静态static方法,几乎囊括了所有对数组的操作需求。
以下是猿们经常会用到的一些方法
那么,在操作数组时,有Arrays工具类,会成为你贴心的小帮手。
but,在java面试时,关于数组排序和查找类的问题比较常见,动不动会让你写出自己的一套实现。哎。不要慌,针对此情况,我们选2个面试高频代码撸一撸,让你镇静下来。
安利开始:
高频一:排序问题,冒泡排序
冒泡排序应该是初级程序员面试经常必点名菜了,它内部通过俩层for循环,让相邻俩个数值进行对比,最终得到从小到大的有序排列数组
上代码伺候 :
public static int[] bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
另外,面试时经常会问到自定义对象数组排序问题,而提及此块,又会扯出来Compareable接口和Compartor接口的区别,针对此问题,可查看本人博文
https://blog.csdn.net/ted_cs/article/details/82713706
高频二:根据已知值查对应索引问题
根据已知值查对应索引其实很简单,直接把数组遍历一下然后进行比较就可
代码如下:
public static int indexOfValue(int[] arr, int i) {
for (int j = 0; j < arr.length; j++) {
if (i == arr[j]) {
return j;
}
}
return -1; //如果没有满足条件,返回-1
}
真是to young to simple啊,面试时,面试题一般是冷冷的这样问“根据已知值查对应索引,请写出二分法的查找实现”
OMG,什么是二分法? 不知道聪明的你有没有发现,根据值查找索引通过遍历数组的方法虽然简单,但如果数组过大,而你要查找的值又在数组后位,是不是会浪费效率? 而二分法查找正是解决效率问题的。
二分查找法也称为折半查找法,它充分利用了元素间的次序关系,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。
红色警戒:使用二分法查找时,数组一定要是有序排列。
二分查找对应的Arrays工具类中的binarySearch(int[] a, int key) 方法,它的实现有俩套
- 通过while循环实现
public static int binarySearch(int[] arr,int value) {
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
while(arr[mid] != value) {
if(arr[mid] > value) {
max = mid - 1;
}else if(arr[mid] < value) {
min = mid + 1;
}
if(min > max) {
return -1;
}
mid = (min+max)/2;
}
return mid;
}
- 递归实现
public static int binarySearch(Integer array[], int key, int left, int right) {
int center = left + (right - left) / 2; // 防止用(left+right)/2时left+high溢出
if (array[center] == key) {
System.out.println("找到了");
return center;
} else if (array[center] < key) {
return binarySearch(array, key, center + 1, right);
} else if (array[center] > key) {
return binarySearch(array, key, left, center - 1);
}
return -1;
}
好了,此篇就分享至此了。
本篇如有帮到困惑的你,请施主一定要给我点亮小爱心哦,顺便加个关注,也是真真极好的呢。