数组

基本概念

  • 一个数组只能存放一种数据类型
  • 数组必须初始化
  • 数组在初始化时就确定了长度,之后不能再更改
    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,中间用逗号连接,两边用[]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容