数组

作者: Kevin_Huang54 | 来源:发表于2019-02-12 16:43 被阅读0次

    基本概念

    • 一个数组只能存放一种数据类型
    • 数组必须初始化
    • 数组在初始化时就确定了长度,之后不能再更改
      1、静态初始化:指定值,不指定长度
    int[] a = new int[]{1,2,3,4}
    //简化写法:
    int[] a = {1,2,3,4}
    

    2、动态初始化:只指定长度,系统会自动填充默认值

    int[] a = new int[10]
    
    • 整型,自动填充0
    • 浮点型,自动填充0.0
    • 布尔型,自动填充false
    • 字符型,自动填充\u0000
    • 引用类型,自动填充null

    数组的遍历

    • 使用for循环
    • 使用foreach循环
      • foreach得到的循环变量,不要去修改或赋值
      • 那只是一个临时变量,并不是数组元素,对它赋值没有实际意义
    • 通过Arrays.stream(Array array)方法将数组转换为stream,再用foreach遍历:
    int[] a = new int[10];
    Arrays.stream(a).forEach(i -> System.out.println(i));
    

    数组的储存方式

    • 数组是一个对象,对象都储存在堆内存中(heap)

      • 所有new的对象都会放在堆内存中
      • 不会随方法结束而销毁,以便反复利用
      • 满足一定条件后,会被GC回收
      • 直接将引用变量赋值为null,可以加快回收速度
    • 定义在局部变量中的引用对象储存在栈内存中(stack)

      • 初始化后,引用对象指向堆内存中的数组对象
      • 当一个方法执行时,内部定义的所有变量都会放入栈内存
      • 方法结束后自然销毁
    • 基本类型数组的储存示意图

      • 赋值后直接把基本类型数据填入数组中


        基本类型数组的储存
    • 引用类型数组的储存示意图

      • 先在堆内存中新建要插入的对象
      • 数组元素是引用类型,赋值后指向对象


        引用类型数组的储存
      • 如果通过lee和zhang修改了对应对象的内容,打印数组元素显示的内容也会变化,因为两者指向堆内存中的同一个对象
    • Arrays工具类常用方法

      • int binarySearch(数组引用, key)——使用二分法查询一个key的索引,数组需要排序才能获得正确结果
      • type[] copyOf(数组引用,length)——复制数组,创建一个新数组(也仅仅是创建引用,而不是新对象),根据length不同,新数组是前length位元素,或者超出后自动填充
      • type[] copyOf(数组引用,int from, int to)——复制数组,索引从from到to
      • boolean equals(数组引用1, 数组引用2),判断两者的数组元素是否相等,全部相等则返回true
      • void fill(数组引用,内容), 设置所有数组元素
      • String toString(数组引用),将数组转换为String,中间用逗号连接,两边用[]

    相关文章

      网友评论

          本文标题:数组

          本文链接:https://www.haomeiwen.com/subject/zpykeqtx.html