首页 > 其他分享 >第3章:数组

第3章:数组

时间:2023-01-06 15:47:04浏览次数:34  
标签:初始化 arr 元素 数组 var new

1、数组的概述

数组(Array):是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
数组的相关概念:
    数组名:数组的名称
    元素:相同类型的具体数据
    角标、下标、索引
    数组的长度:元素的个数
数组的特点:
    (1)、数组属于引用类型的变量,里面的每个元素可以是任何数据类型,包括基本数据类型和引用数据类型。
    (2)、创建数组对象会在内存中开辟一块连续的空间进行存储,数组名中的引用的是这块连续空间的首地址。
    (3)、数组的长度一旦确定,就无法再更改。
    (4)、我们能够通过下标的方式直接查找到指定位置的元素,速度很快。
数组的分类:
    (1)按照数组的维数:一维数组、二维数组……
    (2)按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组。

2、一维数组的使用

(1)数组声明和初始化方法:
    声明:类型 类型名称; 如int num;
    初始化:类型名称赋值;如 num = 1;
    声明并初始化:同时进行类型的声明和初始化; 如 int num = 1;

    数组的声明方式:type[] var 或 type var[] (type:数组元素类型 var:元素名称)
    数组的初始化:
        a、静态初始化:var = new int[] {100, 200, 300, 400}; 数组的初始化和数组元素的赋值操 作同时进行。
        b、动态初始化:var = new int[5];数组的初始化和数组元素的赋值操作分开进行。
    总结:不管是静态初始化还是动态初始化,数组一旦初始化完成,其长度就确定了。

(2)数组的引用:
    数组引用的前提条件:声明并运用运算符new为之分配空间后,才可以引用数组中的元素。
    数组的引用方式:数组名[数组元素下标] (数组元素的下标可以是整型常量也可以是整型表达式)
    数组元素下标的范围:从0开始,到数组的长度-1为止

(3)获取数组的长度:
    每个数组都有一个属性length指明其长度,即数组名.length为该数组的长度(元素个数)。
(4)遍历数组元素:
    通过for或while循环,并定义一个变量从0不断自增到数组长度减一,然后输出即可。

(5)数组元素的默认初始化值:

(6)数组的内存解析:
    栈(stack):线性数据结构,主要存放局部变量。
    堆(heap):主要存放new出来的结构:对象和数组
    方法区:常量池、静态域以及类加载信息。

一维数组的内存解析:
    静态初始化:int[] arr = new int[]{1,2,3};先在栈空间中加入一个局部变量arr,然后在堆中创建一段连续的int类型的结构,并且初始值为0,然后根据静态初始化中的值对各个元素进行赋值,最后将该连续结构的首地址(十六进制)赋值给arr,将两者通过首地址联系起来。
当我们要去查询数组中某一个元素的时候,其是根据索引的下标和该数组的首地址算出其相对 地址进行查找到我们所需要的元素的地址的,从而找出对应的元素内容。还记得我们之前有提 到Java的自动回收功能,当我们某个局部变量结束以后,其会自动出栈,即被收回了,那么此 时其指向的堆中的对象就没有人再指向他,那么之后系统会根据这样判断,然后也将其回收掉。
    动态初始化和静态初始化是一样的,只不过不是在初始化的时候赋值,而是根据用户在之后需要赋值的时候进行赋值。
    这就是引用类型数据的特点,将对象的首地址存放在栈中,对象实际内容存放在堆中,通过栈中的对象的首地址指向该对象的内容,起到一个引用的特点。

3、多维数组的使用

    由于数组中元素的类型可以是引用类型的数组,因此二维数组其实就可以看成是一维数组arr1又作为另一个一维数组arr2的元素的数组(多维同理)。从数组的底层的运行机制来看,其实没有多维数组。
(1)二维数组的声明和初始化:
        静态初始化:type[][] var = new type[][]{{1,2,3},{2,4},{5,6}};
        动态初始化:type[][] var = new type[3][2]或type[][] var = new type[3][];
(2)数组的引用:var[x][y]; 第x行的第y列的元素
(3)获取数组的长度:
    var.length:var二维数组的行个数
    var[x].length:var二维数组第x行的列个数
(4)二维数组元素的默认初始化值:
    二维数组分为外层数组元素(arr[x])和内层数组元素(arr[x][y]),对于外层数组元素的初始值是其内层数组元素首地址值,对于内层数组元素的初始值同一维原理。
(5)二维数组的内存解析:

4、数组中涉及到的常见算法

5、Arrays工具类的使用

一般类名+s表示其工具类,可以在API文档中进行查询。
Java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法。

比如说我们要对一个数组进行排序,即Arrays.sort(要排序的数组名称);

6、数组使用中的常见异常

(1)数组角标越界的异常:ArrayIndexOutOfBooundsExcetion
    即出现引用数组时的下标超除了数组的长度大小范围。
(2)空指针异常:NullPointerException
    情况1:数组未赋值,为null的情况。
        int[] arr = new int[]{1,2,3};
        arr = null;
        输出arr[0]报错,空指针问题。此时的arr值为null,即没有指向堆中的数据,我们去arr 中找第一个元素肯定就错了。
    情况2:
        int[][] arr = new int[4][];
        输出arr[0][0],空指针问题。
    情况3:
        String[] arr = new String[]{“AA”,“BB”,“CC”};
        arr[3] = null;
        输出arr[3].tostring();空指针问题。
    总结:当对null进行操作时,会发生空指针的问题。即对一个没有指向任何数据的东西进行操作。

标签:初始化,arr,元素,数组,var,new
From: https://www.cnblogs.com/bananayjy/p/17030592.html

相关文章

  • 稀疏数组
    用途:将普通数组转为稀疏数组来达到节省空间的目的介绍:代码: importcn.hutool.core.util.ObjectUtil;importorg.junit.Test;publicclassSparseArrayTest{......
  • 数组字符串转数组
    数组字符串转数组Stringstr="[262698,262699,262701]";Integer[]integers=JSON.parseObject(str,Integer[].class); //二维数组字符串转二维数组Stringstr......
  • 2023.1.06 java打印杨辉三角(二维数组)
    publicclassyanghui{publicstaticvoidmain(String[]args){int[][]yanghui=newint[10][];for(inti=0;i<yanghui.length;i++){......
  • 文件和byte数组之间相互转换
    文件转换成byte数组文件转换成byte数组有两种方式:1.传统方式Filefile=newFile("/temp/abc.txt");//initarraywithfilelengthbyte[]bytesArray=newbyte[......
  • Shell 数组
    数组中可以存放多个值。BashShell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类似)。与大部分编程语言类似,数组元素的下标由0开始。Shell数组用括......
  • JS数组对象去重同时判断两个属性是否相同
    参考:https://blog.csdn.net/m0_58849641/article/details/124750983?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1-12......
  • hdu: 张煊的金箍棒(3)(树状数组的区间修改,区间查询)
    ProblemDescription张煊的金箍棒升级了!升级后的金箍棒是由N段相同长度的金属棒连接而成(最开始每段金属棒的价值都是1,从1到N编号);张煊作为金箍棒的主人,可以对金箍棒任意......
  • 【numpy】创建ndarray数组
    创建数组ndarray构造器创建importnumpyasnp'''使用底层ndarray构造器来创建参数说明:名称 描述object 数组或嵌套的数列dtype 数组元素的数据类型,可选cop......
  • 数组
    前言:上篇博客我们学习了函数,紧接着我们趁热打铁,来学习数组,数组在C语言中的地位不输入函数哦1.一维数组的创建和初始化。1.1数组的创建数组是一组相同类型元素的集合。......
  • javascript array 数组 indexOf
    javascriptarray数组indexOf低版本的array是没有indexOf的。参考链接:https://reference.codeproject.com/javascript/Reference/Global_Objects/Array/indexOf/......