zoukankan      html  css  js  c++  java
  • 数组

    • 创建数组

    基本语法

    // 动态初始化
    数据类型[] 数组名称 = 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][];//不规则数组
  • 相关阅读:
    常用正则表达式
    Python的ASCII, GB2312, Unicode , UTF-8 相互转换
    Java 获取Linux 的IP地址
    MySql 取一天的开始时间和结束时间
    MyCat 主键ID自增长配置
    helm安使用
    Photoshop 7.0 安装及注册方法
    photoshop7.0 排版一寸照片、2寸照片
    DevOps工具链
    traefik安装
  • 原文地址:https://www.cnblogs.com/tfil/p/14228123.html
Copyright © 2011-2022 走看看