最近看了一些关于java数组的资料,在此总结一下:
一、数组的定义和类型:数组就是类型相同的数据对象元素集合。简单的说:就是类型相同的数据存储在一个容器里面【注意:Java中的数组是引用类型,即使一个数组中存放的都是基本数据类型,但这个数组类型同样是引用类型】。
二、数组的声明和初始化:
1、 数组的声明有两种方式:一种是[]放在类型的后面,另一种是放在变量名的后面。建议使用第一种类型,数组本身就是一种类型,也就是说int[] 是一种类型。第一种也符合Java中变量的声明规范。
eg: int[] arrayOne; 或 int arrayTwo[];
2、数组的初始化有两种方式:
第一种动态初始化:在数组定义的时候只指定了数组的长度。
第二种静态初始化:在定义数组的同时显示的为数组元素赋值。
eg:
一维数组的初始化:
1) int[] a; //声明,没有初始化
2) int[] a=new int[5]; //初始化为默认值,int型为0
3) int[] a={1,2,3,4,5}; //初始化为给定值
4) int[] a=new int[]{1,2,3,4,5}; //同(3)
int[] a=new int[5]{1,2,3,4,5}; //错误,如果提供了数组初始化操作,则不能定义维表达式
5) int[] a;
a=new int[5]; //正确,同(2)一样
int[] a;
a={1,2,3,4,5}; //错误,数组常量只能在初始化操作中使用,如(3)
6) int a[];
a[0]=1; //错误,因为数组没有初始化,不能赋值
a[1]=2;
三、数组的长度:
数组长度在初始化的时候就已经被指定了,数组长度一旦被指定长度,就不能进行修改。也就是说,数组的长度是不可变。
获取数组的长度是通过length属性得到。而不是length()方法。
四、数组的遍历方法:
方法一、通过普通的for循环遍历数组元素
eg:
int[] arrayX=new int[]{1,2,3,5,9,10};//定义一个整型数组arrayX
for(int i=0;i<arrayX.lenght;i++){ //循环遍历数组元素
System.out.println(arrayX[i]); //输出数组中的每一个元素的值。
}
方法二、通过特殊for循环遍历数组元素
eg:
String[] arrayStr=new String[]{"aa","bb","cc","dd"}
for(String str:arrayStr){
System.out.println(str);
}
五、多维数组:
多维数组可以理解为数组中的数组。Java中数组类型是引用类型,因此,数组变量其实就是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存[Java中允许多维数组当成一维数组处理。初始化多维数组时可以先只初始化最左边的维数,此时该数组的每个元素都相当于一个数组引用变量,这些元素还需要进一步初始化]。
下面以二维数组为例:
public static void main(String[] args) {
//定义一个二维数组
int[][] array;
//把二维数组当成一维数组进行初始化,系统默认值是null
array=new int[4][];
//把array数组当成一维数组,遍历array数组中的每一个元素、
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
//初始化array数组的第一个元素
array[0]=new int[3];
//给array数组中的第一个元素所指数组的第二个元素赋值
array[0][1]=12;
//array数组的第一个元素是一个一维数组。遍历该一维数组
for(int j=0;j<array[0].length;j++){
System.out.println(array[0][j]);
}
}
该实例在内存中示意图:
二位数组实例:
定义一个二维数组,动态指定数组的行和列的大小,动态给数组赋值,并打印输出二维数组的元素。
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入二维数组行的大小:");
int row=sc.nextInt();
int[][] array;
array=new int[row][];
for(int i=0;i<array.length;i++){
System.out.println("请输入列的大小:");
int cols=sc.nextInt();
array[i]=new int[cols];
for(int j=0;j<array[i].length;j++){
System.out.println("请输入第"+(i+1)+"行的第"+(j+1)+"列的值:");
array[i][j]=sc.nextInt();
}
}
System.out.println("\n\n");
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
六、操作数组的工具类:
Java提供的Arrays类里包含了一些static修饰方法可以直接操作数组,下面简单的列举几个常见的方法:
1.void sort(type[] a) 该方法对数组a的数组元素进行排序。2.void sort(type[] a,int fromIndex,int toIndex):该方法和上面的方法类似,区别在与该方法仅仅对fromIndex到toIndex索引的元素进行排序。
3.boolean equals(type[] a,type[] b):如果a数组和b数组的长度相等,而且a数组和b数组的数组元素一一相同,该方法返回true。
4.type[] copyOf(type[] original,int newLength):这个方法将会把original数组复制成一个新数组,其中length是新数组的长度,如果length小于original数组的长度 则新数组就是原数组的前面length个元素;相反,如果length大于original数组的长度,则新数组的前面元素就是原数组的所有元素。后面补充0(数值型)、false(布尔类型)或者null(引用类型)。
5.String toString(type[] a):该方法将一个数组转换成一个字符串,该方法按顺序把多个数组元素连缀在一起。多个数组元素使用英文逗号和空格隔开。
6.void fill(type[] a,type val):该方法将会把a数组所有元素值都赋值为val。
下面是一个简单的实例:
public static void main(String[] args) {
//定义一个数组a
int[] a=new int[]{3,4,5,7,6,2};
//定义一个数组b
int[] b=new int[]{3,4,5,7,6,2};
System.out.println("a数组和b数组是否相等:"+Arrays.equals(a, b));
int[] c=Arrays.copyOf(a, 7);
System.out.println("a数组和c数组是否相等:"+Arrays.equals(a, c));
System.out.println("c数组的元素为:"+Arrays.toString(c));
//将b数组中的所有元素都赋值为30
Arrays.fill(b, 30);
System.out.println("b数组元素的为:"+Arrays.toString(b));
Arrays.sort(a);
System.out.println("a数组排序后的元素为:"+Arrays.toString(a));
}