Java的Arrays类介绍

Arrays

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。

多种方法 都是 static

多个字符串转list

List<String> strList = Arrays.asList("abc","def","cde");
//asList源码
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

数组转字符串 (可以当循环遍历输出)

System.out.println(Arrays.toString(arr));
//toString 源码  重写了Object的toString()
    public static String toString(long[] a) {
        if (a == null)
            return "null";		//传入数组为null,返回"null"
        int iMax = a.length - 1;	//拿最大索引值
        if (iMax == -1)			//数组里没元素返回"[]"
            return "[]";

        StringBuilder b = new StringBuilder();  //线程不安全,但高效
        b.append('[');		//加前[入缓冲区
        for (int i = 0; ; i++) {
            b.append(a[i]); //加元素
            if (i == iMax)
                return b.append(']').toString();//加末尾[并转为String
            b.append(", ");
        }
    }

数组排序

Arrays.sort(arr);//快速排序

二分查找法

// 二分查找还可以查找好多东西
int [] arr {1,2,3,4,5,6,7,8};//arr必须先排序,不然不能确定返回是什么
System.out.println(Arrays.binarySearch(arr,3));//返回下标值
System.out.println(Arrays.binarySearch(arr,0));//负的插入点-1(-2)
  private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex; 		//最小索引
        int high = toIndex - 1;	//最大索引数组长度-1

        while (low <= high) {		//最小索引小于等于最大索引可以循环
            int mid = (low + high) >>> 1;	//求出中间索引值,(最大+最小)/2
            int midVal = a[mid];	//通过中间索引获取中间值

            if (midVal < key)		//中间索引对应的值小于查找的值
                low = mid + 1;	//最小索引变化
            else if (midVal > key)	//中间索引对应的值大于查找值
                high = mid - 1;	//最大索引变化
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }
复制数组copyOf()方法
Arrays.copyOf(int [] arr ,int len)  //从0开始 长度为len
   public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
        @SuppressWarnings("unchecked")
        T[] copy = ((Object)newType == (Object)Object[].class)
            ? (T[]) new Object[newLength]
            : (T[]) Array.newInstance(newType.getComponentType(), newLength);
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
         //这里依然是使用了System.arraycopy方法,前面提到过,它是native方法,作用是对数组的
         //复制,之前在String类中也提到了它,
        return copy;
    }

希望大家多看一下:Java方法之–System.arraycopy方法和Arrays.copyOf()

复制数组copyOfRange()方法
Arrays.copyOfRange(int [] arr,int start,int end) //包含头不包含尾
fill函数 填满
Arrays.fill(); //用于填满数组的函数
比较两个数组
Arrays.equals(arr1, arr2);
    public static boolean equals(int[] a, int[] a2) {
        if (a==a2)				//两数组地址一样返回true
            return true;
        if (a==null || a2==null)		// 如果两数组任一数组为null 返回false
            return false;		

        int length = a.length;		//如果长度不同 ,返回false
        if (a2.length != length)
            return false;			

        for (int i=0; i<length; i++)		//一一对比,如果有一个不一样返回false
            if (a[i] != a2[i])
                return false;

        return true;				//到这里还没返回,那么返回true
    }

猜你喜欢

转载自blog.csdn.net/qq_40435621/article/details/84310268