美文网首页程序员
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

    封装的工具类 调用工具类中的方法 JAVA自带数组工具类Arrays

  • 2018-02-24

    Java:数组工具类Arrays类的常用方法的用法及代码 Arrays类是JDK提供的专门用于操作数组的工具类,位...

  • java笔记--整合使用

    创建一个数组工具类ArrayTool,对常见的对数组操作的方法进行封装: 主函数类ArrayToolDemo进行调用:

  • Java 中的数组 使用 Arrays 类操作

    使用 Arrays 类操作 Java 中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.u...

  • Java数组扩展

    使用 Arrays 类操作 Java 中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.u...

  • 一.使用Arrays类操作Java中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.uti...

  • 要想数组用的 6,怎能不懂 java.util.Arrays

    java.util.Arrays 类就是为数组而生的专用工具类,基本上常见的对数组的操作,Arrays 类都考虑到...

  • day17-16-集合(Arrays)

    Arrays:用于操作数组的工具类。里面都是静态的asList:将数组变成list集合 import java.u...

  • Java Arrays 操作

    位于java.util包内的Arrays类是Java提供的一个操作数组的工具类,其内部定义了一些常见的用于操作数组...

  • 7

    数组工具类-文档注释 建立一个用于操作数组的工具类,其中包含着常见的对数组操作的函数如:最值,排序等 @autho...

网友评论

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

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