java 自带的数组辅助类_Java中Arrays工具类详解

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

该类有以下特点:

1.无法被创建对象

29041a946f0a503824e2409f6b03dfc5.png

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

4fb047714b5fd2a720452c3933c60ca2.png

下面着重讲解asList方法

首先看看源码:

@SafeVarargspublic static ListasList(T... a) {return new ArrayList<>(a);

}

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

其实ArrayList底层就是数组。

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

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

4a781cc30048c6f31db9c76c4ee92974.png

该构造方法

ArrayList(E[] array) {if (array==null)throw newNullPointerException();

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));

结果如下:

[[I@82764b]

[[I@12452e8]

[[I@1bf3d87, [I@60991f, [I@1e4f7c2]

[abc, xyz, kpl]

[123, 123, 123]

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

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

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

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

6183ca328a22174ed446dbde7d138006.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值