一、数组
1、数组的优点和缺点,并且要理解为什么。
第一:空间存储上内存地址是连续的,每个元素占用的空间大小相同。
第二:知道首元素的内存地址,通过下标可以计算出偏移量。通过一个数学表达式,就可以快速计算出某个下标位置上元素的内存地址,直接通过内存地址定位,效率非常高。
优点:检索效率高。
缺点:随机增删效率较低,数组无法存储大数据量。
注意:数组最后一个元素的增删效率不受影响。
2、一维数组的初始化和遍历
1)静态初始化:
int[] arr = {1,2,3,4};
Object[] objs = {new Object(), new Object(), new Object()};
2)动态初始化:
int[] arr = new int[4]; // 4个长度,每个元素默认值0
Object[] objs = new Object[4]; // 4个长度,每个元素默认值null
3)一维数组的遍历
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
注意:length是属性不是方法,length为当前数组的总长度。
3、二维数组的初始化和遍历
1)静态初始化:
int[][] arr = {
{1,2,34},
{54,4,34,3},
{2,34,4,5}
};
Object[][] arr = {
{new Object(),new Object()},
{new Object(),new Object()},
{new Object(),new Object(),new Object()}
};
2)动态初始化:
int[][] arr = new int[3][4];
Object[][] arr = new Object[4][4];
Animal[][] arr = new Animal[3][4];
// Person类型数组,里面可以存储Person类型对象,以及Person类型的子类型都可以。
Person[][] arr = new Person[2][2];
....
3)二维数组的遍历
for(int i = 0; i < arr.length; i++){ // 外层for循环负责遍历外面的一维数组。
// 里面这个for循环负责遍历二维数组里面的一维数组。
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j]);
}
// 换行。
System.out.println();
}
4、main方法上“String[] args”参数的使用
非重点,了解一下,以后一般都是有界面的,用户可以在界面上输入用户名和密码等参数信息。
5、数组的拷贝:System.arraycopy()方法的使用
arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
srcs:原数组;
srcPos:从原数组哪个下标开始;
dest:目标数组;
destPos:从目标数组哪个下标开始;
length:从原数组拷贝几个元素到目标数组;
数组有一个特点:长度一旦确定,不可变。
所以数组长度不够的时候,需要扩容,扩容的机制是:新建一个大数组,将小数组中的数据拷贝到大数组,然后小数组对象被垃圾回收。