★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<Integer>[] a1 = new List<Integer>[10];
List<Integer>[] a2;
List[] a3 = new List[10];
a2 = (List<Integer>[]) a3;  // a2可以绕过检查,创建泛型实例数组

泛型中返回数组

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

创建泛型参数数组

class A<T> {
    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个参数:源数组、起始索引、目标数组、起始索引、长度。
  • 对于对象数组执行浅拷贝。
  • 不会自动拆包和包装。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数组并不是只针对数字来说的。仅限于数字的那是数学范畴的数列。计算机编程里的数组是把一堆数据编成了组。数组可以是整型...
    厚土火焱阅读 3,068评论 0 1
  • 一、数组数组是一组使用数字索引的对象,这些对象属于同一种类型。虽然C#为创建数组提供了直接的语言支持,但通用类型系...
    CarlDonitz阅读 3,952评论 0 1
  • 来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4...
    布客飞龙阅读 33,248评论 6 98
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,390评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,399评论 19 139