zoukankan      html  css  js  c++  java
  • Java数组

    数组的基本概念

    如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如:int i1, i2, i3, ... i100;但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你要编写System.out.println()语句100次。

    1、其实所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。

    2、数组本身属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配。

    数组的定义语法有如下两类:

    数组动态初始化:

    数据类型 [] 数组名称 = new 数据类型[长度];声明并开辟数组:那么当数组开辟空间之后,就可以采用如下的方式的操作:

    数组的访问通过索引完成,即:“数组名称[索引]”,但是需要注意的是,数组的索引从0开始,所以索引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生java.lang.ArrayIndexOutOfBoundsException 异常信息;
    当我们数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值;
    数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一个有限的数据集合,所以应该使用 for 循环。
    在 Java 中提供有一种动态取得数组长度的方式:数组名称.length;
    范例: 定义一个int型数组

    public class ArrayDemo {
    public static void main(String args[]) {
    int data[] = new int[3]; /*开辟了一个长度为3的数组*/
    data[0] = 10; // 第一个元素
    data[1] = 20; // 第二个元素
    data[2] = 30; // 第三个元素
    for(int x = 0; x < data.length; x++) {
    System.out.println(data[x]); //通过循环控制索引
    }
    }
    }

    数组本身除了声明并开辟空间之外还有另外一种开辟模式。

    范例: 采用分步的模式开辟数组空间

    public class ArrayDemo {
    public static void main(String args[]) {
    int data[] = null; 
    data = new int[3]; /*开辟了一个长度为3的数组*/
    data[0] = 10; // 第一个元素
    data[1] = 20; // 第二个元素
    data[2] = 30; // 第三个元素
    for(int x = 0; x < data.length; x++) {
    System.out.println(data[x]); //通过循环控制索引
    }
    }
    }

    但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟控件(实例化),如果使用了没有开辟空间的数组,则一定会出现 NullPointerException 异常信息,这一原则和对象是完全相同的:

    public class ArrayDemo {
    public static void main(String args[]) {
    int data[] = null; 
    System.out.println(data[x]);
    }
    }
    Exception in thread "main" java.lang.NullPointerException

    数组引用传递:既然数组属于引用数据类型,那么也一定可以发生引用传递。在这之前首先来研究一下数组的空间开辟。

    public class ArrayDemo {
    public static void main(String args[]) {
    int data[] = null;
    data = new int[3]; //开辟一个长度为3的数组
    data[0] = 10;
    data[1] = 20;
    data[2] = 30;
    }
    }

    是引用数据类型就一定可以发生引用传递,而现在的引用传递的本质也一定是:同一块堆内存空间可以被不同的栈内存所指向。

    public class ArrayDemo {
    public static void main(String args[]) {
    int data[] = null;
    data = new int[3]; //开辟一个长度为3的数组
    int temp[] = null; //声明对象
    data[0] = 10;
    data[1] = 20;
    data[2] = 30;
    temp = data; //int temp[] = data;
    temp[0] = 99;
    for(int i = 0; i < temp.length; i++) {
    System.out.println(data[i]);
    }
    }
    }

    数组静态初始化

    之前所进行的数组定义都有一个明显特点:数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。

    数组的静态初始化一共分为以下两种类型:

    简化格式: 数据类型 数组名称 = {值, 值,…}
    完整格式: 数据类型 数组名称 = new 数据类型[] {值, 值,…}

    public class ArrayDemo {
    public static void main(String args[]) {
    int data[] = {1, 2, 4, 545, 11, 32, 13131, 4444};
    for(int i = 0; i < data.length; i++) {
    System.out.println(data[i]);
    }
    }
    }

      在开发之中,对于静态数组的初始化强烈建议使用完整语法模式,这样可以轻松地使用匿名数组这一概念。

    public class ArrayDemo {
    public static void main(String args[]) {
    System.out.println(new int[] {1, 2, 4, 545, 11, 32, 13131, 4444}.length);
    }
    }

    二维数组

    在之前所使用的数组发现只需要一个索引就可以进行访问,那么这样的数组实际上非常像一个数据行的概念:

    索引 0 1 2 3 4 5 6 7 8
    内容 12 23 44 56 90 445 49 99 1010

    现在痛过一个索引就可以取得唯一的一个记录。所以这样的数组可以简单理解为一维数组,而二维数组本质上指的是行列集合,也如果要确定某一个数据需要行索引和列索引来进行定位。数组的数组就是二维数组。

    索引 0 1 2 3 4 5 6 7 8
    0 12 23 44 56 90 445 49 99 1010
    1 2 3 41 56 9 45 49 99 10

    二维数组的定义有两种声明形式:

    数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];  这种声明可以只标明行个数,例int num[][] = new int[3][];

    数组的静态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数]{{值, 值,…}, {值, 值,…},…};  这种声明不标明行和列个数

    public class ArrayDemo {
    public static void main(String args[]) {
    //此时的数组并不是一个等列数组
    int data[][] = new int[][] {
    {1, 2, 3}, {4, 5}, {6, 7, 8, 9}};
    //如果在进行输出的时候一定要使用双重循环,
    //外部的循环控制输出的行数,而内部的循环控制输出列数
    for(int i = 0; i < data.length; i++) {
    for(int j = 0; j < data[i].length; j++) {
    System.out.print("data[" + i + "][" + j + "]=" + data[i][j] + "、");
    }
    System.out.println();
    }
    }
    }

    原文链接:https://blog.csdn.net/mrbacker/article/details/81638331

  • 相关阅读:
    Docker GitLab镜像部署
    Kubernetes集群部署之三ETCD集群部署
    Kubernetes集群部署之二CA证书制作
    Kubernetes集群部署之一系统环境初始化
    docker开源仓库Harbor部署笔记
    git分支
    git高清技能图
    vue+uwsgi+nginx部署路飞学城
    git基础
    git安装与初始化
  • 原文地址:https://www.cnblogs.com/songbeyond/p/11481819.html
Copyright © 2011-2022 走看看