java 数组 学习笔记

1数组的概念
数组指的是一组相关类型的变量集合。并且这些变量可以按照统一的方式进行操作。
2动态初始化
数据类型 [ ] 数组名称 = new 数据类型 [长度]

int [] array = new int [5];//数组是引用类型,牵扯内存分配问题

可通过数组下标进行索引

array[0]=1;//数组第一个元素赋值为1
array[1]=2;//数组第二个元素赋值为2
array[2]=3;//数组第三个元素赋值为3

另一种定义数组的方法

int[] array = null ;
array = new int[3] ;//数组属于引用类型,使用前一定要开辟空间,否则会出现NullPoninterException 

3数组的静态初始化
在动态初始化中数组首先开辟空间,然后借助索引对数组内容进行设置。而静态初始化则是在定义数组时就可以设置数组的内容。

int[] array = {1,2,3,4,5} ; //静态初始化


切记:静态初始化时 [ ] 内不可添加数组长度
完整的写法为

int[] array=new int []{1,2,3,4,5};

4 引用传递

首先我们知道在数组中可借用length动态获得数组长度,

array.length

看下面一段代码

int[] array1= null ;     
int[] array2 = null ; // 声明对象       
array1 = new int[3] ;        
System.out.println(x.length) ;       
array1[0] = 1 ; // 数组第一个元素赋值为1 
array1[1] = 2 ; // 数组第二个元素赋值为2    
array1[2] = 3 ; // 数组第三个元素赋值为3
for (int i = 0; i<array1.length ; i++) {            
          System.out.println(array1[i]) ; //  通过循环控制索引下标遍历数组
 }        
          array2 = array1 ; //   引用传递时不要出现 []   
          array2[0] = 5 ; //利用索引下标将数组第一个元素更改为5

引出一个概念:(这里将出现一个传送门,记录堆和栈的学习笔记)
一块栈内存只能保存一个堆内存地址
同一块堆内存地址可以被不同栈内存所指

 array2 = array1 ; //   引用传递时,就是同一块堆内存地址被不同栈内存地址所指

5二维数组

5.1概念理解
将二维数组看成一维数组,只不过每个数组元素又是一个数组
5.2动态初始化
类似一维数组的动态初始化,多加一个[] 即可

int [][]  array = new int [5] [3];//可看作5行3列的矩阵,通过下标索引精确找到每个元素 

5.3静态初始化
类似一维数组的静态初始化,多加一个[]即可

int [][] array=new int[][]{{2,3},{4,5},{6,7}};//一个3行2列的矩阵

6数组的拷贝
常见的有4种拷贝方式:
for循环实现拷贝

public class Test2 {
    public static void main(String[] args) {
        int[] array1 = new int[] { 1,2,3,4,5};
        int[] array2 = {1,1,1,1,1};
        for(int i=0;i<array1.length;i++){
            array2[i]=array1[i];
        }
        for (int i=0 ;i<array2.length;i++) {
            System.out.println(array2[i]);
        }
    }
}

int [] array2=array1.clone()

import java.util.Arrays;//调用了toString方法需要加包
public class Test2 {
    public static void main(String[] args) {
        int [] array1 = new int []{1,2,3,4};
        int [] array2 = array1.clone();//将array1复制给array2
        System.out.println(Arrays.toString(array2)); //toString方法以字符串形式打印数组
    }
}

Arrays.copyOf(源数组名称,新数组长度)

import java.util.Arrays;             //需添加对应的包
public class Test2 {
    public static void main(String[] args) {
        int[] array1 = new int[] { 1,2,3,4,5};
        int[] array2 = Arrays.copyOf(array1, 10);
        for (int i: array2) {          //for循环打印数组的变体
            System.out.println(i);   //注意括号内是变量i而非array2[i]
        }
    }//源数组长度为5,使用Arrays.copyOf时,新数组长度为10,不够的部分自动补0
}

System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度) //拷贝速度最快

import java.util.Arrays;//需添加对应的包
public class Test2 {
    public static void main(String[] args) {
        int[] array1 = new int[] { 1,2,3,4,5};
        int[] array2 = {1,1,1,1,1};
        System.arraycopy(array1,2,array2,1,3);
        for (int i = 0;i<array2.length;i++) {
            System.out.println(i);
        }
    }//保证新数组的复制起点+复制长度 !> 新数组长度
}

猜你喜欢

转载自blog.csdn.net/qq_37160391/article/details/89099464
今日推荐