美文网首页程序员
day18_自行封装数组操作的工具类_JAVA自带数组工具类Ar

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

作者: 雷阳洪 | 来源:发表于2019-03-06 18:00 被阅读5次
    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);
        }
    }
    

    相关文章

      网友评论

        本文标题:day18_自行封装数组操作的工具类_JAVA自带数组工具类Ar

        本文链接:https://www.haomeiwen.com/subject/fqnouqtx.html