我对数组学习主要分为三部分:①定义和创建 ②使用 ③操作
一 定义和创建
定义
谈到数组定义,我们想到是int[] a 或者 int a[]形式的。没错,这两种形式都可以,个人推荐第一种,更能体现数组是一个新的类型。
提问:为什么不是c语言中 int a[10]这种形式
答:数组变量是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量,这个引用变量还未指向任何有效的内存,因此定义数组变量时不能指定数组的长度。
创建
既然标题分为定义和创建,那么我们完成了定义以后肯定还需要进行创建(因为这一步得到的只是一个引用,类似类和对象)。
所谓初始化就是为数组的元素分配内存空间,并为每个元素赋初始值。
数组变量的初始化有两种方式:
静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
动态初始化 :初始化时程序员只指定数组长度,由系统为数组分配初始值。
提问:能不能只分配内存空间,而不赋予初始值?
答:能,即动态初始化
静态初始化(由编译器确定长度)举例说明:
int[ ] a = new int[ ]{3,5,8,10,100}; //数组长度=5
Integer[] b = new Integer[]{new Integer(3), 5, new Integer(8)}; //长度=3
Integer[] d;
d={new Integer(3), 5, new Integer(8)}; //错误的赋值语句(数组常量只能在初始化操作中使用)
d=new Integer[]{new Integer(3), 5, new Integer(8)}; //正确的赋值语句
动态初始化(由程序员指定长度)举例说明:
产生数组对象,包含5个元素,首先元素只‘零值’初始化;然后调用数组对象引用再初始化数组变量price
int[] price = new int[5];
price = new int[5]; //引用另一个数组
for (int i=0; i<price.length; i++)
price[i]=8;
提问:下面代码正确吗?
for (int e : price)
e=8;
错误,数组各变量的值仍为0。使用foreach循环迭代数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量进行赋值。
注意:不要静态初始化和动态初始化同时使用,也就是不要再进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。
二 使用注意
(1)数组作为参数传递到方法中时,传递的是数组的引用,故改变是内外同时进行的。
(2)数组可作为返回类型返回
public static int[] reverse(int[] list) ;
三 数组操作
Java.util.Arrays中提供了许多方法可用于数组操作,如:
数组的填充( fill )
数组的复制( copyof )
数组的比较( equals )
数组的排序( sort )
数组查找( binarySearch )
总结:当需要对一组对象进行处理时,数组是效率最高的一种数据结构。
操作具体例题不再啰嗦,有需要的直接搜索关键字就可得到大量文章介绍。