数组

  • 创建数组

基本语法

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

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

for循环

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

for-each

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

引用本质上只是存了一个地址,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));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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));
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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));
}
  • 1
  • 2
  • 3
  • 4
  • 5

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));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
深浅拷贝

深拷贝

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

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));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

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

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));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

  • 二维数组

基本语法

原文章:

 

数据类型[][] 数组名称 = 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][];//不规则数组
原文地址:https://www.cnblogs.com/tfil/p/14228123.html