Java基础,Arrays常用方法

版权声明:Songcz原创,如有转载请注明出处 https://blog.csdn.net/weixin_43701058/article/details/90111588

java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法。
1.asList():返回由指定数组支持的固定大小列表。
PS:我没怎么用过这个方法,别误人子弟…简单介绍下吧…

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

Arrays.asList 比较适合那些已经有数组数据或者一些元素,而需要快速构建一个List,只用于读取操作,而不进行添加或删除操作的场景。

public class Arraytest {
	public static void main(String[] args){
		 int[] a={4,5,7,1,2};
		 System.out.println(Arrays.asList(a));
	}
}

运行结果:[[I@15db9742]

2.sort():该方法是用于数组排序。

public static void sort(int[] a) {
        DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
    }
public static void sort(int[] a, int fromIndex, int toIndex) {
        rangeCheck(a.length, fromIndex, toIndex);
        DualPivotQuicksort.sort(a, fromIndex, toIndex - 1, null, 0, 0);
    }
.../*对sort方法做了好多重载,byte,char,double,float,int,long,short都能
排序,这里就不都列举了,有兴趣的可以自行查看Arrays类源码。
*/

关于sort方法的实现,确实有点复杂…DualPivotQuicksort.sort …这东西源码挺长的涉及快速排序,插入排序,冒泡排序。我也没仔细研究…感兴趣的可以参考这篇博客。我们直接看看效果。

public class Arraytest {
	public static void main(String[] args){
		 int[] a={4,5,7,1,2};
	     Arrays.sort(a);	     
	     System.out.println(Arrays.toString(a));
	}
}

运行结果:[1, 2, 4, 5, 7]
这里说一下对于基本数据类型来说sort()方法是不稳定的排序算法,但是引用数据类型它就是稳定的排序算法…
3.parallelSort() :java8新增的并行排序算法,基于fork/join框架。

public static void parallelSort(byte[] a) {
        int n = a.length, p, g;
        if (n <= MIN_ARRAY_SORT_GRAN ||
            (p = ForkJoinPool.getCommonPoolParallelism()) == 1)
            DualPivotQuicksort.sort(a, 0, n - 1);
        else
            new ArraysParallelSortHelpers.FJByte.Sorter
                (null, a, new byte[n], 0, n, 0,
                 ((g = n / (p << 2)) <= MIN_ARRAY_SORT_GRAN) ?
                 MIN_ARRAY_SORT_GRAN : g).invoke();
    }

这个这么说吧…排序算法是稳定的,将数组拆分成多个子数组,多线程进行排序,然后归并。
好处就数据特别多的时候,10000以上吧并行算法就能表现出较高的效率。
4.binarySearch() :二分法查找方法。

public static int binarySearch(long[] a, long key) {
        return binarySearch0(a, 0, a.length, key);
    }

binarySearch()二分法查找方法,可以看出来他返回一个int型,也就是查找元素的下标。

public class Arraytest {
	public static void main(String[] args){
		 int[] a={4,5,7,1,2};
		 //二分法查找得是有序的,所以先排序。
	     Arrays.sort(a);	   //[1, 2, 4, 5, 7]
	     System.out.println(Arrays.binarySearch(a, 2));
	}
}

运行结果:1
5.equals(): 用来比较两个数组中对应位置的每个元素是否相等。

public static boolean equals(int[] a, int[] a2) {
        if (a==a2)
            return true;
        if (a==null || a2==null)
            return false;

        int length = a.length;
        if (a2.length != length)
            return false;

        for (int i=0; i<length; i++)
            if (a[i] != a2[i])
                return false;

        return true;
    }

6.toString(),deepToString() :toString 用来打印一维数组的元素,而 deepToString 用来打印多层次嵌套的数组元素。
这里就不放例子了,toString()方法在上面的例子中多次使用。

猜你喜欢

转载自blog.csdn.net/weixin_43701058/article/details/90111588
今日推荐