JavaSE--数组

JavaSE–数组

1.概念

①数组可以看成是多个相同类型数据的组合,对这些数据实现统一·的管理;

②数组变量属于引用类型(因为在Java中除了八大基本数据类型以外,其他都是引用类型)。数组中的每个元素相当于该对象(该数组)的成员变量。也就是说把每个元素看成成员变量,这样在初始化时就应当遵循成员变量的初始化规则(八大基本数据类型初始化根据下表的规则来初始化,引用类型的初始化为null);
③数组中的元素可以是任何数据类型,包括基本类型和引用类型(但数组中的数据类型必须一致);

2.一维数组

①数组声明:

格式为: 类型(也就是数组元素的类型) 数组名[ ] 或者 类型[] 数组名(习惯后者);
例如:

1int a[] 或者 int[] a 2 3Person p1 [] 或者 Person[] p1 4

注意: Java中声明数组时不能指定其长度,例如int a[5]; 是非法的(因为int a[ ]这步只是在栈中分配了引用类型的a,此时值为null);、
②数组对象的创建:

前面说了:数组是一个对象,声明是在栈中分配引用类型,并没有指向哪个对象,而这个对象就是数组对象。

格式为: 数组名 = new 数组元素的类型 [长度(就是数组元素的个数) ]
例如:

1a = new int[5]; 2

内存分析:在堆中开辟5个连续的空间作为该数组对象,根据类型按成员变量进行自动初始化(这里是int类型,所以自动初始化为0),然后把地址赋给a,使得a指向该对象,完成创建;

合并格式: 类型 数组名 = new 元素类型 [数组元素的个数]
例如:int[] a = new int[5];(内存分配过程不变)

③初始化数组对象:

->1.根据作为成员变量默认初始化;
->2.动态初始化:数组定义(声明)与数组元素分配空间分开进行:

1int[] a; 2a = new int[5]; 3a[0] = 1; a[1] = 2;... 4

->3.静态初始化:在定义数组的同时就为数组元素分配空间并赋值,

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

**④数组元素的引用:**数组名 [ 索引(从零开始,长度-1结束)] ,如a [ 3]
注意:
① 使用前必须先定义了数组且已经为元素分配了空间;
②每个数组都有一个属性length:指明其长度:a.length(没有括号,是个属性);

其他:关于main方法的args[ ] 是代表接收从命令行键入的参数(java a.java 命令行参数);

3.常见相关算法

①选择排序与优化;
②冒泡排序;
③二分法查找;

4.二维数组

①数组声明: int [ ] [ ] a;
**②数组对象的创建:**a = new int[3] [ ];
这里是在堆中分配3个连续的空间,初始值为null(待会用来指向下一个对象),并把地址赋给a,使得a指向该对象;
注意:Java中多维数组的声明和初始化是按从高维到低维的顺序进行;

③初始化数组对象:
->1.根据作为成员变量默认初始化;
->2.动态初始化:数组定义(声明)与数组元素分配空间分开进行:

1int[][] a = new int[3][]; 2a[0] = new int[2]; 3a[1] = new int[2]; 4a[3] = new int[2]; 5a[0][1] = 1; 6a[0][2] = 2; 7... 8

->3.静态初始化:在定义数组的同时就为数组元素分配空间并赋值:

1int[][] a = { {1, 2}, {1, 2}, {1, 2} }; 2

这里是在堆区在创建a[0], a[1], a[2]三个对象,然后分别进行初始化,再把地址传给相应的元素,完成初始化;
**④数组元素的引用:**a[0][1]:表示选择第一个对象的第二个元素,为2;
其中,二维数组也有length:这里的a.length表示3;a[i].length表示2(假设为i,for循环里用);

5.数组的拷贝

使用java.lang.System类的静态方法:

1public static void arraycopy(Object src(原数组), int srcPos(需要拷贝的原始数组位置), Object dest(目标数组), int destPos(拷贝到目标数组的位置), int length(拷贝的长度)) 2

其中:
①实质是拷贝内存到目标数组里面(效率高);
②如果原数据数目超过目标数组边界会抛出IndexOutOfBoundsException异常;

6.数组实用类:Arrays

Arrays提供了一系列的静态方法:(没写出重载的形式)
①equals():比较两个数组是否相同。只有当两个数组中的元素数目相同,并且对应位置的元素都相同时,才表明数组相同;
②fill():向数组中填充数据;
③sort():把数组中的元素按升序排列。如果数组中的元素为引用类型,会采用自然排序方式;
④parallelSort():开启多个线程,以并发的方式对数组中的元素进行排序,提高排序的效率;
⑤binarySearch():按照二分法查找算法,查找出数组中值与给定数据相同的元素。在调用该方法时,必须保证数组中的元素已经按照升序排列;
⑥asList():把数组转换成一个List对象,将其返回;
⑦toString():返回包含数组中所有元素信息的字符串;

代码交流 2021