day18_自行封装数组操作的工具类_JAVA自带数组工具类Arrays

作者 : 开心源码 本文共3411个字,预计阅读时间需要9分钟 发布时间: 2022-05-12 共178人阅读

image.png

封装的工具类

//表示数组的工具类,涵盖了很多操作数组的方法class ArrayUtil {    //交换元素    static void swap(int[] arr,int index1,int index2)    {        int temp = arr[index1];        arr[index1] = arr[index2];        arr[index2] = temp;    }    //获取数组中最大元素    static int getMax(int[] nums)    {        int j = nums[0];//假设数组第一个值为最大值        for (int i = 1;i < nums.length ;i ++ )        {            if (nums[i] > j)            {                j = nums[i];//就把最大值存储在j变量中            }        }        return j;    }    //获取数组中最小元素    static int getMin(int[] nums)    {        int k = nums[0];//假设数组第一个值为最小值        for (int i = 1;i < nums.length ;i ++ )        {            if (nums[i] < k)            {                k = nums[i];//就把最大值存储在k变量中            }        }        return k;    }    //打印数组        static void print(int[] arr)    {        //思路:先打印数组"[]",再获取arr数组里面的元素,而后再做if判断,判断假如当前i的值不是最后一个索引,则拼接        if (arr == null)        {            System.out.println("null");            return;         }        String ret = "[";        for (int i = 0;i < arr.length ;i ++ )        {            ret = ret + arr[i];            //假如当前i不是最后一个索引,则拼接", "            if (i != arr.length - 1)            {                ret = ret + ", ";            }        }        ret = ret  +  "]";        System.out.println(ret);    }    //逆序排序    static String[] reverse(String[] oldArr)    {        //创立一个新的数组,存储颠倒之后的元素        String[] newArr = new String [oldArr.length];        for (int i = oldArr.length - 1;i >= 0 ;i -- )        {            //i = 4 newArr[0]            //i = 3 newArr[1]            newArr[oldArr.length - 1 - i] = oldArr[i];        }        return newArr;    }    //二分搜索法/二分查找法/折半查找    static int binarySearch(int[] arr,int key)    {        int low = 0;//最小的索引        int high = arr.length - 1;//最大的索引        while (low <= high)        {            System.out.println(low+"----------"+high);            int mid = (low + high) >> 1 ;//中间索引            int midVal = arr[mid];//将中间索引的元素赋值给变量midVal            if(midVal > key)//猜大了            {                high = mid - 1;//最大的索引=中间索引-1(缩小搜索范围)            }            else if(midVal < key)//猜小了            {                low = mid + 1;//最小的索引=中间索引+1(缩小搜索范围)            }            else            {                return mid;//假如中间索引恰好=key值,就直接返回mid            }        }        return -1;//如果说传入的元素没有在数组中,直接返回-1,表示不在该数组范围内,越界了.    }    //选择排序    static void selectinonSort(int[] arr)    {        /*        //第一轮        for (int i = 1;i <= arr.length - 1 ;i ++ )        {            if (arr[0] > arr[i])            {                swap(arr,0,i);            }        }        //第二轮        for (int i = 2;i <= arr.length - 1 ;i ++ )        {            if (arr[1] > arr[i])            {                swap(arr,1,i);            }        }        //第三轮        for (int i = 3;i <= arr.length - 1 ;i ++ )        {            if (arr[2] > arr[i])            {                swap(arr,2,i);            }        }        */        //代码增强        for (int j = 1;j <= arr.length - 1;j ++ )        {                for (int i = j;i <= arr.length - 1 ;i ++ )            {                if (arr[j - 1] > arr[i])                {                    swap(arr,j - 1,i);                }            }        }            }    //冒泡排序    static void sort(int[] arr)    {        //代码增强          for (int i = 1;i <= arr.length - 1 ;i ++ )        {            for (int j = 1;j <= arr.length - i ;j ++ )            {                if (arr[j - 1] > arr[j])                {                    swap(arr,j-1,j);                }            }        }        /*        //第一轮        for (int i = 1;i <= arr.length - 1 ;i ++ )        {            if (arr[i - 1] > arr[i])            {                swap(arr,i-1,i);            }        }        //第二轮        for (int i = 1;i <= arr.length - 2 ;i ++ )        {            if (arr[i - 1] > arr[i])            {                swap(arr,i-1,i);            }        }        //第三轮        for (int i = 1;i <= arr.length - 3 ;i ++ )        {            if (arr[i - 1] > arr[i])            {                swap(arr,i-1,i);            }        }        */    }    static void copy(int[] src,int srcPos,int[] dest,int destPos,int length)    {        /*        //拷贝3        dest[destPos]=src[srcPos];        //拷贝4        srcPos++; destPos++;        dest[destPos]=src[srcPos];        //拷贝5        srcPos++; destPos++;        dest[destPos]=src[srcPos];        //拷贝6        srcPos++; destPos++;        dest[destPos]=src[srcPos];        */        //优化后的代码        //i等于每次需要拷贝元素的索引        for (int i = srcPos;i < srcPos + length;i ++ )        {                dest[destPos] = src[i];                destPos++;        }    }//元素第一次索引    static int indexOf(int[] arr,int key)    {        for (int index = 0;index < arr.length ;index ++ )        {            if (arr[index] == key)            {                return index;            }        }        return -1;    }//最后一次    static int lastIndexOf(int[] arr,int key)    {        for (int index = arr.length-1;index >=0 ;index -- )        {            if (arr[index] == key)            {                return index;            }        }        return -1;    }}

调用工具类中的方法

image.png

class ArrayUtilDemo {    public static void main(String[] args)     {        int[] arr = {2,8,1,9,14,58,69,42};        ArrayUtil.print(arr);        //搜索6的索引        ArrayUtil.sort(arr);//排序        ArrayUtil.print(arr);//打印        int index = ArrayUtil.binarySearch(arr,42);//搜索42的索引        System.out.println(index);//打印返回对应的索引值    }}

JAVA自带数组工具类Arrays

image.png

//演示数组的工具类,Arrays类class ArraysDemo {    public static void main(String[] args)     {        int[] arr = {2,8,1,9,14,58,69,42};        String ret = java.util.Arrays.toString(arr);//打印数组元素         System.out.println(ret);        java.util.Arrays.sort(arr);//排序数组        String ret1 = java.util.Arrays.toString(arr);        System.out.println(ret1);                java.util.Arrays.sort(arr);//二分搜索        int index = java.util.Arrays.binarySearch(arr,8);        System.out.println(index);    }}

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » day18_自行封装数组操作的工具类_JAVA自带数组工具类Arrays

发表回复