java 数组
1.数组创建
java中数组创建有两种方式分别如下:
type arrName[]=new type[arrSize];
type[] arrName=new type[arrSize];
type为元素数据类型,arrName为数组名,arrSize为数组大小,数据类型可以是原始数据类型int等,也可以是引用数据类型。
我个人一般比较喜欢用第二种方式,这样可以把type[]看做一个类,那么arrName就是一个对象,便于理解。但二者是没有功能差别的
arrSize是预先确定数组大小,一旦确定,不再更改,所以需要提前确定你需要多大的空间。
2.初始化
初始化包括静态和动态初始化,分别如下方式:
静态:
int[] arrInt={1,2,3,4,5};
String[] arrString={"aaa","bbb","ccc"};
这样可以不用声明数组大小。
动态:
float[] arrFloat=new float[3];
arrFloat[0]=0.1f;
arrFloat[1]=1.0f;
arrFloat[2]=1.2f;
需要预先确定数组大小。
注意:对于引用类型数据初始化,需要先创建特定对象,再将数组指向该对象。什么意思?看如下代码:
public class Array {
public static void main(String[] args) {
MyClass[] arr=new MyClass[3];
arr[1].id=1;
System.out.println(arr[1].id);
}
}
class MyClass{
public int value;
public int id;
public MyClass(int id,int value){
this.value=value;
this.id=id;
}
}
运行该代码,会发现报错:
Exception in thread “main” java.lang.NullPointerException
这是由于没有显式的把某个对象引用传给数组元素。
修改如下:
public class Array {
public static void main(String[] args) {
MyClass[] arr=new MyClass[3];
arr[1]=new MyClass(1,2);//将一个真实对象传给数组元素
System.out.println(arr[1].id);
}
}
对于数组元素是引用类型的数组,在访问数组中对象之前,需要创建相应的对象并 让数组元素引用它.
3.数组访问
跟c,c++一样,直接通过下标访问元素,但是一定要确保下标大于等于0小于数组最大长度,数组长度用length属性指明。
数组变量一般会直接想到使用for循环,如下示例:
public class Array {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
这种方法固然可行,但是java还提供foreach供用户遍历,示例如下:
public class Array {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
for(int ele:arr){
System.out.println(ele);
}
}
}
其中迭代变量ele必须在()内声明,该方法就是声明了一个和arr相同数据类型的变量ele,使用ele来遍历整个arr数组,从第一个元素到最后一个。
4.数组作为方法参数
数组作为方法参数是按引用传递的,如果方法中有代码更改了数组元素的值,实 际上是直接修改了原始的数组元素。
按值传递时,方法体中修改的仅是原始数组 元素的一个拷贝。
public class Array {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
for(int e:arr){
modifyElement(e);
}
String str1="";
for(int e:arr){
str1+=(e+",");
}
System.out.println(str1);//输出:1,2,3,4,5,
String str2="";
modifyArray(arr);
for(int e:arr){
str2+=(e+",");
}
System.out.println(str2);//输出:2,4,6,8,10,
}
public static void modifyElement(int e){
e*=2;
}
public static void modifyArray(int[] arr){//改变了arr
for(int i=0;i<arr.length;i++){
arr[i]*=2;
}
}
}
5.多维数组
实际上并不存在多维数组,可以看做一个一维数组,只不过他的元素是多维数组罢了。
java中多维数组可以是不整齐的。
int b[][] = { { 1, 2 }, { 3, 4, 5 } };
6.一些方法使用
System.arraycopy((Object src,int srcPos,Object dest,int destPos,int length)
src是源数组,srcPos是源数组赋值起始位置,dest是目标数组,destPos是目标数组起始位置,length是赋值长度。
Arrays类中提供了许多静态方法供使用,参考Arrays