1.数组定义:
最常用的数组定义方式:
开辟空间式:
数组存储的数据类型 数组名称[数组元素个数]=new 数组存储的数据类型[数组元素个数]
比如:int a[]=new int[3];
添加元素:a[0]=1;
a[1]=2;
a[2]=3;
其中 [ ] 中的0,1,2为数组的索引,从0开始:
索引就是数组元素存储的位置标记,从0开始到n-1结束,n为数组元素个数 其中[ ]中索引可以省略不写,第一个元素索引为0,也就是arr[0]=1;存储数组的第一个元素,依次对应。
直接存放元素式:
数组存储的数据类型 数组名称[数组元素个数]={存储元素};
例如:: int arr [ ]={1,2,3,4};
定义了一个存储数据类型为int型的,名称为arr的数组,里面存储的元素为1,2,3,4。
定义一个二维数组:
int arr[][]={{1,2},{3,4},{5,6}};
[][]分别代表行和列的索引,例如arr[0][0],就是第一行第一列的元素
2.数组遍历:
数组名.length 表示数组的长度
经常使用for循环:
遍历一维数组:
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
遍历二维数组:
for(int i=0;i<arr.length;i++){
for(int j=0;i<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
还可以这样写:
for(循环变量类型 循环变量名称 :要被遍历的对象){}
for(int i:arr){
System.out.println(i);
}
这种方式更为简便,与一般for语句遍历结果一样。
3.返回和修改数组
public class B {
public static void main(String[] args) {
int b[]=a();
update(b);
printfArray(b);
}
//返回数组的方法
public static int[] a(){
return new int[]{1,2,3,4,5};
}
//遍历数组
public static void printfArray(int []arr){
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
//修改数组
public static void update(int []arry){
for (int i=0;i<arry.length;i++)
{
arry[i]+=1; //每个元素+1
}
}
}
4.数组拷贝
数组拷贝有几种方式:
1.for语句直接遍历要复制的数组,对应元素位置赋值
例如:将a1[]数组拷贝到a2[]中:
定义的被拷贝数组长度要小于或等于拷贝数组的长度
否则会发生数组越界异常:ArrayIndexOutOfBoundsException
for(int i=0;i<a1.length;i++){
a2[i]=a1[i];
}
-
调用System.arraycopy(原数组名称,原数组开始点,目标数组名称,目标数组开始点,拷贝长度);
public static void main(String[] args) { int a[]={1,2,3,4,5,6,7}; int b[]={8,9,10,11,12,13,14}; System.arraycopy(a,0,b,0,6); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } }
上面程序输出结果为:1 2 3 4 5 6 14
成功将数组a的前6个元素拷贝到数组b上。
3.数组动态扩容拷贝(java集合框架就是用此方法动态扩容):
调用方法:Arrays.copyof(原数组名称,新数组长度);
public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7};
int b[]=Arrays.copyOf(a,7);
for (int i=0;i<b.length;i++)
{
System.out.println(b[i]);
}
}
4.调用clone();方法
Arrays.toString(数组名);可以将数组以字符串形式打印出来:
下方运行出来结果就为:
[1,2,3,4,5,6,7,8]
[1,2,3,4,5,6,7,8]
public static void main(String[] args) {
int[] a1=new int[]{1,2,3,4,5,6,7,8};
int[] a2=new int[a1.length];
a2=a1.clone();
System.out.println(Arrays.toString(a1));
System.out.println(Arrays.toString(a2));
}
重点:
四种数组拷贝方式中拷贝最快的为System.arraycopy();因为其底层是用C/C++写的。
四种拷贝方式对于基本类型来说都是深拷贝,对于引用类型来说都是浅拷贝。
关于深拷贝和浅拷贝的详细介绍有兴趣的可以去:
https://blog.csdn.net/baiye_xing/article/details/71788741
5.对象数组的动态初始化(经常用):
格式:类名称[] 对象数组名称=new 类名称[长度];
public class B {
private String name;
private int age;
public B(String name,int age){
this.name=name;
this.age=age;
}
public void get(){
System.out.println("姓名:"+this.name+"年龄:"+this.age);
}
}
public class A{
public static void main(String[] args) {
B[] b={new B("a",1),
new B("b",2),
new B("c",3)};
for(int i=0;i<b.length;i++){
b[i].get();
}//调用get方法获取name和age
}
}
输出结果为:
姓名:a 年龄:1
姓名:b 年龄:2
姓名:c 年龄:3
关于java数组部分暂时就只了解这么多如果有错误或者有高见的,欢迎各位大佬评论区指明,感激不尽!