zoukankan      html  css  js  c++  java
  • 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));

    结果如下:

    [[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,画个图形如一下。

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

  • 相关阅读:
    sqlite数据库如何远程连接?
    redis的两种持久化方案
    Netty入门系列(1) --使用Netty搭建服务端和客户端
    使用MQ消息队列的优缺点
    Netty基础系列(3) --彻底理解NIO
    Netty基础系列(2) --彻底理解阻塞非阻塞与同步异步的区别
    Netty基础系列(1) --linux网路I/O模型
    Jedis异常解决:NOAUTH Authentication required
    java并发编程(2) --Synchronized与Volatile区别
    java并发编程(1) --并发基础及其锁的原理
  • 原文地址:https://www.cnblogs.com/dingjm01/p/8335055.html
Copyright © 2011-2022 走看看