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接口有什么含义?我将在下一节为大家讲解,谢谢。

  • 相关阅读:
    LeetCode 42. Trapping Rain Water
    LeetCode 209. Minimum Size Subarray Sum
    LeetCode 50. Pow(x, n)
    LeetCode 80. Remove Duplicates from Sorted Array II
    Window10 激活
    Premiere 关键帧缩放
    AE 「酷酷的藤」特效字幕制作方法
    51Talk第一天 培训系列1
    Premiere 视频转场
    Premiere 暴徒生活Thug Life
  • 原文地址:https://www.cnblogs.com/dingjm01/p/8335055.html
Copyright © 2011-2022 走看看