java.util.Arrays工具类介绍 及 冒泡排序和二分法查询binarySearch代码实现

版权声明:Hi,屏幕前的猿你好,我和你一样是一个渴望成为技术大牛的low级程序员,(当然如果是大神的话,怎么会来到我分享编程基础知识的博客呢),此篇博文中分享内容如帮到你,请一定不能吝啬帮我点赞,评论,关注,帮我来个全套大保健呢!我愿与你一同成长变强,得到技术加持,祈愿! https://blog.csdn.net/ted_cs/article/details/82693901

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;
    }

好了,此篇就分享至此了。
本篇如有帮到困惑的你,请施主一定要给我点亮小爱心哦,顺便加个关注,也是真真极好的呢。



这里写图片描述

猜你喜欢

转载自blog.csdn.net/ted_cs/article/details/82693901
今日推荐