数组的定义与使用
数组的基本定义
程序之中考虑到一组变量的整体维护,Java中将数组定义为引用数据类型,考虑内存分配,要想到new来处理
- 数组的动态初始化
- 数据类型 数组名称[] = new 数据类型[长度]
- 数据类型 [] 数组名称 = new 数据类型[长度]
- 数组的静态初始化
- 简化格式:数据类型 数组名称[] = {1,2,3,…};
- 完整格式:数据类型 数组名称[] = new 数据类型[]{1,2,3,…};
数组使用:
- 注意不要超出范围
- 使用.length了解数组长度
最多的数组使用形式为数组的循环处理,动态初始化为数据类型的默认值,希望数组定义时可提供内容, 则使用静态初始化
数组引用传递分析
数组本身属于引用数据类型,一定会发生引用传递,传统方式,一个堆内存可以被多个栈内存所指向;
由于数组属于引用类型,一定要在开辟堆内存空间后使用,否则会发生NullPointerException;
必须提供实例化对象才可以使用下标的形式进行数组的操作。
foreach输出
对于数组一般使用for循环进行输出,往往使用数组下标的形式;
从JDK1.5之后,引入增强型for循环(foreach),可以避免下标访问;
for(数据类型 变量:数组|集合){}
二维数组
使用行下标和列下标共同定义使用,对于二维数组使用的定义语法:
- 数组的动态初始化
- 数据类型 数组名称[][] = new 数据类型[][]
- 数组的静态初始化
- 数据类型 数组名称[][] = new 数据类型[][]
二维数组的每一行属于一维数组,通过length找到的是二维数组的行数;
for (int temp[] : data){ // 遍历一个一维数组
for (int num:temp){
system.out.println(num);
}
}
二维数组就是数组的嵌套使用,若要进行应用层程序开发,很少会涉及到二维数组
数组与方法
引用数据类型可以进行引用传递,通过方法返回一个数组,仅需类型设置;
主方法中的代码应该简单一些,复杂方法应放在单独的程序类中执行;
只要是方法都可以接受引用类型。
数组排序案例分析
将排序处理的类完成;
在类设计的时候,若发现类中属性没有存在的意义,那么定义的方法就没有必要使用普通方法了,因为普通方法需要再有实例化对象产生的时候才可以调用;
数组转置案例分析
首尾交换,
方法一:定义一个新数组而后按照逆序的方式保存,会产生无用垃圾空间;
方法二:在一个数组上进行转置,存在if判断增加了时间复杂度,可减少无对象的产生,
数组相关类库
Java数组中提供相关支持处理,
库包:java.util.Arrays
System.arraycopy(原数组,原数组起始点,目标数组,目标数组起始点,拷贝长度)
方法可变参数
对于方法的参数支持可变参数;
可变参数的本质仍旧是一个数组
对象数组
类也可以成为数组类型,称为对象数组,定义:
- 动态初始化:类 对象数组名称 [] = new 类 [长度] 每一个元素的内容都是null
- 静态初始化:类 对象数组名称 [] = new 类 []{实例化对象,实例化对象,…}
对于对象数组而言,本身只是更换了一种所谓的数组定义的类型,但此时内存图较麻烦,所有开发都离不开对象数组。
缺陷:长度优先;
优势:线性保存,访问速度快;
本文围绕Java数组展开,介绍了数组的基本定义,包括动态和静态初始化,阐述了数组引用传递、foreach输出、二维数组等内容。还分析了数组与方法的关系,给出数组排序和转置案例,提及数组相关类库、方法可变参数和对象数组,指出其优缺点。

被折叠的 条评论
为什么被折叠?



