数组

  • 创建数组

基本语法

// 动态初始化
数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };
// 静态初始化
数据类型[] 数组名称 = { 初始化数据 };

代码示例
int[] arr = new int[]{1, 2, 3}; 
int[] arr = {1, 2, 3};
遍历数组

for循环

int[] arr = {1, 2, 3}; 
for (int i = 0; i < arr.length; i++) { 
	System.out.println(arr[i]);
 }

for-each

int[] arr = {1, 2, 3}; 
for (int x : arr) { 
	System.out.println(x); 
}
引用

引用本质上只是存了一个地址,java将数组设置为引用类型,进行数组传参时,只是将数组的地址传入函数参数中,可以避免整个数组的拷贝因为数组比较大时,拷贝开销就很大。

null

null在java中表示空引用,无效的引用

null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出NullPointerException.

Java 中并没有约定 null 和 0 号地址的内存有任何关联

重点:数组拷贝

1. Arrays.copyOf()



public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        //参数1:拷贝的数组
		//参数2:拷贝的长度
        int[] arr1=Arrays.copyOf(arr,arr.length);        System.out.println(Arrays.toString(arr1));
}

2. System.arraycopy()

public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int[] arr1=new int[arr.length];
        /*
        * 参数1:源数组
        * 参数2:源拷贝位置
        * 参数3:目的数组
        * 参数4:目的拷贝位置
        * 参数5:拷贝大小
        */
        System.arraycopy(arr,0,arr1,0,arr.length);
        System.out.println(Arrays.toString(arr1));
    }

3. clone()

public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int[] arr1=arr.clone();
        System.out.println(Arrays.toString(arr1));
}

4. for循环

public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int[] arr1=arr.clone();
        for (int i=0;i<arr.length;i++){
            arr1[i]=arr[i];
        }
        System.out.println(Arrays.toString(arr1));
}
深浅拷贝

深拷贝

在堆内存中分配新空间,将之前的数组堆内存中的内容拷贝到新的空间中。
针对简单类型/基本类型,修改拷贝后的数组的下标的元素的时候,不会影响原数组对应元素的值

int[] arr={1,2,3,4,5};
        int[] ret=new int[arr.length];
        for (int i=0;i<arr.length;i++){
            ret[i]=arr[i];
        }

        System.out.println("原数组:"+Arrays.toString(arr));
        System.out.println("拷贝数组:"+Arrays.toString(ret));
        ret[0]=6;
        System.out.println("修改元素后原数组:"+Arrays.toString(arr));
        System.out.println("修改元素后的拷贝数组:"+Arrays.toString(ret));

在这里插入图片描述
浅拷贝

在堆内存中不会分配新的空间,而是增加一个引用变量和之前的引用指向相同的堆空间。
修改拷贝后的数组的下标的元素的时候,会影响原数组对应元素的值

int[] arr={1,2,3,4,5};
        int[] ret=arr;
        System.out.println("原数组:"+Arrays.toString(arr));
        System.out.println("拷贝数组:"+Arrays.toString(ret));
        ret[0]=6;
        System.out.println("修改元素后原数组:"+Arrays.toString(arr));
        System.out.println("修改元素后的拷贝数组:"+Arrays.toString(ret));

在这里插入图片描述

  • 二维数组

基本语法

数据类型[][] 数组名称 = new 数据类型 [][] { 初始化数据 };

四种定义方式

int[][] arr1={{1,2,3},{4,5,6}};
int[][] arr2=new int[][]{{1,2,3},{4,5,6}};
int[][] arr3=new int[2][3];
int[][] arr4=new int[2][];//不规则数组
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值