数组类型
数组是编程语言中常见的一种数据结构,用于存储多个数据,每个数组元素存放一个数据,可以通过索引来访问数组元素,包括赋值和读取。
Java的数组要求所有数组元素具有相同的数据类型。一旦数组初始化完成,数组在内存中所占的空间将被固定下来,数组长度不可改变。Java中数组可以保存基本类型的数组,也可以存储引用类型的数组,只要所有数组元素的具有相同的类型即可。
一、定义数组:
Java语言支持两种语法格式来定义数组:
type[] array;
trype array[];
通常推荐使用第一种,c/c++程序员一般使用第二种。
数组是一种引用变量,使用它定义一个变量时,仅仅定义了一个引用变量,这个引用变量未指向任何有效内存,因此不能指定数据长度,同样该数组也不能使用,只有初始化后才可以使用。
二、数组初始化
数组初始化有两种方式,静态初始化,动态初始化。
静态初始化:
array = new type[]{element1,element2,elemnt3, …,elementX};
可以简化书写,直接使用花括号:
int[] a = {1,2,3,4,5,6};
动态初始化:
动态初始化只指定数组的长度,由系统为每个数组元素指定初始值。格式如下:
array = new type[ length ];// length 为int类型参数;
动态初始化,我们只要定义数组的长度即可,系统将自动给元素初始化。规则如下:
数组元素类型为byte,int,short,long ,元素初始化为0;
数组元素类型为float,double,数组元素初始化为0.0;
数组元素类型为char,数组元素初始化为’’\u0000;
数组元素类型为boolean,数组元素初始化为false;
数组元素类型为应用类型,数组元素初始化为null;
三、操作数组
操作数组只有查找,更改,没有增加和删除。
访问数组的索引范围在0到数组长度减一的范围内查找,否则会报空指针异常错误。
foreach操作数组
Java5以后,java提供foreach循环,用来遍历数组和集合,使用foreach遍历数组和集合时无需获取数组和集合的长度,无序根据索引来访问,会自动遍历每一个元素。Foreach语法格式如下:
for( type temp : array:collection ){
//temp 自动迭代访问每个元素
}
type是数组元素或集合元素的类型,temp是形参。foreach循环迭代数组元素或集合时,通常对循环变量进行赋值,对循环变量进行赋值的操作,不会改变数组或集合的内容。在foreach中的循环变量相当于一个零时变量,而这个零时变量并不是数组或者结合的元素,它只是保存数组元素的值,如代码code1.java所示:
程序清单: code1.java
public class code1{
public static void main(String[] args)throws IOException
{
String[] array = {"传智博客","黑马训练营","Itcast","itheima"};
for(String tmp:array)
{
tmp = "黑马是最好的培训机构";
System.out.print(tmp+"\t");
}
System.out.println();
System.out.println(array);
}
}
打印结果:
黑马是最好的培训机构黑马是最好的培训机构黑马是最好的培训机构黑马是最好的培训
黑马训
如果希望改变数组元素的值,不能使用foreach循环。
操作数组的工具类:
Java中提供Arrays类中包含一些static修饰的方法可以直接操作数组。可以查阅API文档。
一些常用的方法:
int binarySerache(type[] a,type key): 二分查找,注意数组是已经按按升序排列,如果不包含返回负数。
int binarySerache(type[] a,int formIndex, int toIndex, type key): 和上一方法类似,只搜索数组中formIndex到toIndex索引的元素。
type[] copyOf( type[] a, int length): 这个方法把数组a复制成一个新数组,其中length是新数组长度,如果length小于a的长度,则新书组就是源数组的前面length个元素。如果大于那么后面的数组元素会被自动初始化,参照动态初始化,进行赋值。
type[] copyOfRange( type[] ariginal,,int form, int to, int length): 和上一方法类似,只赋值ariginal数组的form到to索引的元素。
boolean equals(type[] a, type[] a2):如果两个数组长度相同,对应位置的元素也相同,则会返回true,否则false;
void sort(type[] a); 该方法对a数组进行排序。
Void sort(type[] a, ,int formIndex, int toIndex);和上一方法类似,该方法仅仅对formIndex到toIndex索引的元素进行排序。
String toString(type[] a); 该方法将一个数组转换成一个字符串。该方法按顺序把多个数组元素连接在一起,多个数组元素之间用英文逗号和空格隔开。
更多内容请查看API文档。
关于数组的排序:
这个会在后面提到。这里先不说。