★14.数组

关于数组

  • 数组有且只有length字段。
  • 基本类型数组直接存储数据,对象类型数组存储引用。
  • 方法可以返回数组而不需要担心内存泄露问题。

初始化

一维数组

A[] a = new A[4];  // 基本类型被被初始化为0,对象类型会被初始化为null
A[] b = {new A(), new A(), new A()};
A c = new A[]{new A(), new A()};

多维数组

int[][] a = {{1, 2, 3}, {4, 5, 6}};
int[][] b = new int[2][2];
int[][][] c = new int[2][][];
for (int i = 0; i < c.length; i++) {
    c[i] = new int[2][];
    for (int j = 0; j < c[i].length; j++) {
        c[i][j] = new int[2];
    }
}

数组与泛型

创建泛型实例数组

// 擦除使数组不能知道确切类型
List[] a1 = new List[10];
List[] a2;
List[] a3 = new List[10];
a2 = (List[]) a3;  // a2可以绕过检查,创建泛型实例数组

泛型中返回数组

class A {
    // 数组可以知道返回的确切类型
    private T[] fun(T[] arg) {
        return arg;
    }
}

创建泛型参数数组

class A {
    private T[] array;

    public A(int size) {
        array = new T[size];
        array = (T[]) new Object[size];
    }
}

相关工具

Arrays

  • asList():接受一个数组或者一个逗号分隔的元素列表,返回一个尺寸无法改变的List。
  • fill():用数据填充数组。
    • 两个参数:第一个是数组,第二个是要填充的值。
    • 四个参数:第一个是数组,第二三个是要填充的区域,第四个是要填充的值。
  • toString()deepToString():分别将一维数组和多维数组转换为字符串。
  • asList():接受任意的序列或数组,产生一个List容器。
  • equals()deepEquals():分别比较一维数组和多维数组是否相等。
  • sort():对数组进行排序。
  • binarySearch():在已经排序的数组里查找元素。
  • hashCode():产生散列码。

System.arraycopy()

  • 用于复制数组,速度比for循环快。
  • 接受5个参数:源数组、起始索引、目标数组、起始索引、长度。
  • 对于对象数组执行浅拷贝。
  • 不会自动拆包和包装。

你可能感兴趣的:(★14.数组)