【笔记】2021.1.13

一、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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值