一、Java虚拟机初步认识
1.Java栈:当函数被调用时,在Java栈中开辟内存空间。
2.Java堆:当数组被创建时,在Java堆中开辟一段连续的内存空间。
3.方法区:
4.PC寄存器(程序计数器):用于保存下一条指令的地址。
5.本地方法栈:当底层方法被调用时(通常是由C C++实现的底层方法),在本地方法栈中开辟内存空间。
二、函数初步认识
1.函数声明:
函数返回值类型 函数名(参数列表){
函数体
}
1)函数返回值类型:规定了该函数被调用完成后返回给调用函数的值的类型。void表示该函数不返回任何值。类型取自Java数据类型。
2)函数名:要求见名知意,并且遵循驼峰命名法(除第一个单词首字母小写,其余单词首字母大写)
3)参数列表:用于接收调用函数传来的值。参数列表中的变量成为形式参数,调用函数传值的变量称为实际参数。
(PS:一个函数实现一个单一功能,并避免出现打印操作和输入操作)
2.main函数:作为程序的入口点,一般用于测试功能的实现情况,函数体中不允许写功能代码。
三、一维数组
1.特点:
1)相同数据类型的集合
2)Java栈开辟一段连续的内存空间
2.一维数组的定义:
int[] arr = {1,2,3};
int[] arr = new int[]{1,2,3};
int[] arr = new int[3];//数组初始均为默认值0
3.一维数组的遍历输出
1)for语句
for(int i = 0;i < arr.length ; i++ ){
System.out.println(arr[i]);
}
2)Arrays.toString()
//1.
String str = Arrays.toString(arr);
System.out.println(str);
//2.
System.out.println(Arrays.toString(arr));
3)for each语句
for(int value : arr ){
System.out.println(value);
}
4.一维数组的增删操作(前提是数组空间足够)
1)头部添加
(1)移动数据,腾出0下标的位置
(2)0下标赋值操作
2)尾部添加
(1)从0下标开始向后查找第一个值为0的位置
(2)找到位置后赋值并退出循环
3)头部删除
(1)移动数据,后一个数据覆盖前一个数据
(2)将最后一个有效数据赋值为0
4)尾部删除
(1)将最后一个有效数据赋值为0
5.一维数组的拷贝
1)for循环拷贝
int[] arr = {1,2,3};
int[] brr = new int[arr.length];
for(int i = 0; i < arr.length ; i++){
brr[i] = arr[i];
}
2)clone函数
int[] brr = arr.clone();
3)copyOf函数
int[] brr = Arrays.copyOf(arr,arr.length);
4)arraycopy函数
System.arraycopy(
arr //被拷贝数组
,0 //被拷贝起始位置
,brr //结果数组
,0 //拷贝起始位置
,arr.length //拷贝长度)
(PS:第4个效率比第3个高,因为第3个方法调用了第4个方法,并且第4个方法的源码是由C++实现的)
6.一维数组的扩容(由于数组已满,当加入新的数据时,需涉及到扩容问题)
arr = Arrays.copyOf(arr,arr.length*2); //arr数组2倍扩容
7.一维数组的缩容
arr = Arrays.copyOf(arr,arr.length-1); //arr数组减1缩容
四、基于一维数组的两道面试题
1.奇数偶数问题---代码:Test_4_2.java
调整数组顺序使得奇数位于偶数前面。输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
法一:
从头往后遍历这个数组,每碰到一个偶数,拿出这个数字,将位于这个数字后面的所有数字往前挪动一位。挪完之后发现末尾有一个空位,将该偶数放入。
法二:
我们在遍历数组的过程中,如果发现有偶数出现在奇数的前面,交换它们的顺序。创建两个数组下标,第一个数组下标初始化为数组的头,第二个数组下标初始化为数组的尾,在两个下标相遇之前,如果第一个下标总是位于第二个下标之前,第一个下标指向偶数,第二个下标指向奇数,则进行交换。
2.二分查找(折半查找)---代码:Test_4_3.java
创建两个下标,第一个下标low指向当前序列的第一个元素,第二个下标high指向当前序列的最后一个元素。在一个有序的序列中查找目标值,如果目标值小于mid(mid=(low+high)/2)下标所指的值, 则在前半部分low和mid-1之间去查找。如果目标值大于mid下标所指的值,则后半部分mid+1和high之间去查找。如果目标值等于mid下标所指的值,则返回mid。
五、杂项
1.函数引用了一个数组,则需要进行合法性检查。
if(array == null || array.length == 0){
return;
}