- 程序=算法+数据结构
- 数组是最基本的一种数据结构,所谓数据结构就是按照特定的某种结构来保存数据。
1.定义基本类型数组
- 数据类型[] 数组名 = new 数据类型[数组长度];
- int[] arr = new int[10];或者 int arr[] = new int[10]
- int[]:数组中的每一个元素都是int类型
- arr : 数组类型的变量
- 10:数组中元素的个数,即数组的长度。
- 声明数组时不规定数组长度,执行new语句才使得数组分配到指定空间大小
- 通过数组的length属性可以获得数组的长度
int[] arr = new int[]{1,2,3,4};
int len = arr.length;//len为数组长度
2.数组的初始化
- 如果数组类型为基本类型,其元素初始值:byte,short,char,int,long为0;float,double为0.0;boolean为false
- 如果数组类型为引用类型,其元素初始值为null
public class Person {
private int age;
private String name;
public void fun(){
Person[] p = new Person[2];
//p[0],p[1]默认为null
}
}
- 可以在数组声明的同时对元素初始化:(基本类型)int[] arr = {1,2,3,4};元素的个数即为数组的长度。
- (引用类型)Person[] p = {new Person(),new Person()};
- int[] arr = {1,2,3,4};此种写法只能用于声明时初始化,不能用于赋值。
int[] arr;
arr = {1,2,3,4};//这样的写法会报编译错误
//正确写法
int[] arr;
arr = new int[]{1,2,3,4};//[]中不能写长度,元素个数就是数组长度
3.数组的复制
- System.arraycopy()方法用于数组的复制
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
src -源数组
srcPos -源数组中的起始位置
dest -目标数组
destPos -目标数组中的起始位置
length -要复制的数组元素的数量
- Arrays.copyOf()用于方法的复制,获得的新数组是源数组的副本。
类型[] newArray = Arrays.copyOf(类型[] original,int newLength);
-- newLength小于源数组,则进行截取
-- newLength大于源数组,则用0或null进行补充
int[] a = {1,2,3,4};
//复制a数组中的元素,新数组长度为5,最后一位补0
int[] b =Arrays.copyOf(a,5);// b的元素为 {1,2,3,4,0}
- Arrays.copyOf()可以对数组进行扩容。数组创建后,长度就固定了。数组扩容是创建一个更大长度的数组,把原来数组的元素复制到新数组中
int[] a = {1,2,3,4};
a = Arrays.copyOf(a,a.length+1);//创建一个长度为5的新数组赋值给a
4.数组内存结构
- 数组变量 arr指向数组第一个元素的地址。因为地址是连续的,所以通过下标可以遍历获取数组中所有元素
- 这里涉及到引用传递和值传递。
普通变量的赋值,只是将内存空间中的值赋值给另一个变量,这就是值传递
如:int a = 10;
int b = a; //b的值为10
b = 20;//当b改变的时候,a不会变,因为它们属于两个存储空间
引用类型变量赋值时为引用传递,实际传递的是:值所属空间的地址
int[] a = new int[]{1,2,3,4};
int[] b = a;
b[0] = 10;
System.out.println(a[0]);//值为10
因为a赋值给b,是将a中保存的地址复制了一份给了b,a和b指向了同一个内存空间,
a和b任意一个发生改变,两个数组中相同位置的值会同时改变。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。