Java中Arrays工具类详解

Posted dingjm01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中Arrays工具类详解相关的知识,希望对你有一定的参考价值。

Arrays是JDK自带的一个数组辅助工具类。位于java.util包下

该类有以下特点:

1.无法被创建对象

技术分享图片

2.大部分都是静态方法(好像画蛇添足了,hh)

技术分享图片

下面着重讲解asList方法

首先看看源码:

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

源码很简洁,就是给你创建了一个ArrayList,把该数组作为参数传递进去。

其实ArrayList底层就是数组。

再深入看看ArrayList中该构造方法

很奇怪Arrays类里面自己有一个私有的静态类

技术分享图片

 

该构造方法

ArrayList(E[] array) {
      if (array==null)
          throw new NullPointerException();
       a = array;
}

这个也很简洁,直接把传递过来的数组给自己的数组a

可是这个Arrays$ArrayList和java.util.ArrayList有什么区别呢?

借用百度知道heptnaol网友的回答:

不一样,前者只是为了序列化写的一个内部类,只有一个参数为数组的构造函数,且没有add方法,这表示它不能动态扩展内部存储的数组。

好,我们测试一下asList方法
int[] a1 = new int[]{1,2,3};// 一维数组
int[] a2 = new int[]{1,2,3,4};// 一维数组
int[][] a3 = new int[][]{{1,2,3},{0,2,3},{2,2,3}};// 二维数组
String[] a4 = new String[]{"abc","xyz","kpl"};// 字符串数组
Object[] a5 = new Object[]{new String("123"),new String("123"),new String("123")};// Object数组
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a2));
System.out.println(Arrays.asList(a3));
System.out.println(Arrays.asList(a4));
System.out.println(Arrays.asList(a5));

结果如下:

那么问题来了,为什么int数组传递进入asList打印仍然是一个数组的地址呢?

  由于int不是类,所以和T(Type,java类)无法匹配,所以编译器将int[]作为参数传递,所以无法解析该数组。

而String数组和Object数组都是装的对象,所以可以被可变参数拆解成数组。并赋给a数组

不懂?ok,画个图形如一下。

技术分享图片

关于这个Arrays中的内部类ArrayList目前仍然有不解的地方,JDK开发者为什么要这样设计?还有RandomAccess接口有什么含义?我将在下一节为大家讲解,谢谢。



以上是关于Java中Arrays工具类详解的主要内容,如果未能解决你的问题,请参考以下文章

Java-Arrays类-deepEquals()和equals()详解

Java 中Arrays工具类的使用

Java常用类之数组工具类Arrays

Java 中Arrays工具类的使用

java的Arrays工具类实战

同步工具类—CountDownLatch详解