int[] array = { 1, 2, 3, 4, 5 };
// 依次使用数组中的每一个元素, 给迭代变量进行赋值。
// 此时, 数组中的每一个元素依次给 element 进行赋值。
for (int element : array) {
System.out.println(element);
}
}
}
**两种方式的对比**
如果需要在遍历的同时, 获取到数组中的元素下标, 需要使用下标遍历法。
如果需要在遍历的同时, 修改数组中的元素, 需要使用下标遍历法。
如果仅仅是想要获取数组中的每一个元素, 不需要下标, 也不需要修改数组中的元素,
使用增强for循环。 因为这种方式, 遍历的效率比下标遍历法高。
[](https://gitee.com/vip204888/java-p7)函数和数组的联合应用
---------------------------------------------------------------------
### [](https://gitee.com/vip204888/java-p7)函数传参分类
值传递:将保存简单数据的变量作为参数传递
址传递:将保存地址的变量作为参数传递
**址传递优点:让我们可以实现使用一个变量一次传递多个值**
### [](https://gitee.com/vip204888/java-p7)值传递和址传递比较
通过值作为参数传递,函数内部值的变量不会改变外部的值.
通过地址作为参数传递,函数内部值的变量可以直接改变外部值
### [](https://gitee.com/vip204888/java-p7)案例
public class Demo4 {
public static void main(String[] args) {
//交换两个数的值
int[] temp = {3,5};
//地址传递
jiaohuan1(temp);
//我们发现通过址传递数组temp内的两个值发生了交换
System.out.println("temp[0]:"+temp[0]+" temp[1]:"+temp[1]);// 53
//值传递
int[] temp1 = {3,5};
jiaohuan2(temp1[0],temp1[1]);
//通过值传递数组temp内的两个值没有发生交换
System.out.println("temp1[0]:"+temp1[0]+"temp1[1]:"+temp1[1]);// 3 5
}
//地址传递
public static void jiaohuan1(int[] arr) {
arr[0] = arr[0] ^ arr[1];
arr[1] = arr[0] ^ arr[1];
arr[0] = arr[0] ^ arr[1];
}
//值传递
public static void jiaohuan2(int a,int b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/fc5309a4e1014df7b471ae5cc9d9581d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhbmdvZXI=,size_16,color_FFFFFF,t_70#pic_center)
内存说明:
1.我们发现在值传递发生过程中,a和b的值在方法jiaohuan2中确实发生了交换,但是并没有影
响到数组的值.
2.在址传递过程中,方法jiaohuan1中的变量arr和main方法中的变量temp保存的是同一个数组
的地址,所以此时不管我们通过那个变量进行操作,都会对数组的值进行改变.
**总结:址传递的最终原因是两个变量保存了同一个数组的地址,操作的是同一个数组.**
### [](https://gitee.com/vip204888/java-p7)案例
将上面例子中的址传递方法jiaohuan1替换成下面的方法jiaohuan3,再来观察数组temp的值,发现两个值并没有发生交换
public static void jiaohuan3(int[] arr) {//arr = temp
int[] arr2 = new int[2];
arr = arr2;
arr[0] = arr[0] ^ arr[1];
arr[1] = arr[0] ^ arr[1];
arr[0] = arr[0] ^ arr[1];
}
\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZVExSzD-1627046982037)(数组.assets/image-20210719194911059.png)\]
原因总结:当arr = arr2执行后,arr内部保存的地址变成了3456,此时我们再通过arr进行操作的是一个新数组,与temp指向的原数组没有任何关系.所以虽然此时是址传递,但是方法内部也没有影响外部值的变化.
[](https://gitee.com/vip204888/java-p7)排序
-------------------------------------------------------------
排序,即排列顺序,将数组中的元素按照一定的大小关系进行重新排列。
根据时间复杂度和空间复杂度选择排序方法
各算法的时间复杂度
平均时间复杂度
插入排序 O(n2)
冒泡排序 O(n2)
选择排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
归并排序 O(n log n)
基数排序 O(n)
希尔排序 O(n1.25)
复杂度作用:了解了时间复杂度和空间复杂度,可以更好的选择算法,提高排序查找的效率.
在Java中, 我们最常用的排序有:
选择排序:固定值与其他值依次比较大小,互换位置。
冒泡排序:相邻的两个数值比较大小,互换位置。
JDK提供默认的升序排序
[](https://gitee.com/vip204888/java-p7)查询
-------------------------------------------------------------
### [](https://gitee.com/vip204888/java-p7)顺序查询
顺序查询, 即遍历数组中的每一个元素, 和要查询的元素进行对比。 如果是要查询的元素,
这个下标就是要查询的下标。
查询三要素:
1.我们只找查到的第一个与key相同的元素,查询结束.
2.当查询到与key相同的元素时,返回元素的下标
3.如果没有查询到与key相同的元素,返回-1
### [](https://gitee.com/vip204888/java-p7)二分查询
二分查询, 即利用数组中间的位置, 将数组分为前后两个字表。 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
**二分查询, 要求数组必须是排序的, 否则无法使用二分查询。**
![在这里插入图片描述](https://img-blog.csdnimg.cn/521a15ec12b949698880c58e6fb86e90.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhbmdvZXI=,size_16,color_FFFFFF,t_70#pic_center)
[](https://gitee.com/vip204888/java-p7)可变长参数
----------------------------------------------------------------
可以接收多个类型相同的实参,个数不限,使用方式与数组相同。
在调用方法的时候, 实参的数量可以写任意多个。
作用:简化代码,简化操作等
\*\*语法:\*\*数据类型… 形参名
// 这里的参数paramters其实就是一个数组
static void show(int… parameters) {
//
}
[](https://gitee.com/vip204888/java-p7)二维数组
---------------------------------------------------------------
数组是一个拥有固定存储空间的连续的相同数据类型的仓库,,二维数组中,存储的是每个一维数组的地址,每一个维数组的空间不是连续的。
//应用数据类型填充的默认值是null。
二维数组, 其实就是数组中嵌套数组。
# **写在最后**
以上就是我的面试过程,为了这次面试,也收集了很多的面试题,反正我已经面过了,那就免费分享出来吧!
需要的朋友:**关注一下,然后[点击这里即可](https://gitee.com/vip204888/java-p7)免费领取**
以下是部分面试题截图
------------------------------------------
数组是一个拥有固定存储空间的连续的相同数据类型的仓库,,二维数组中,存储的是每个一维数组的地址,每一个维数组的空间不是连续的。
//应用数据类型填充的默认值是null。
二维数组, 其实就是数组中嵌套数组。
# **写在最后**
以上就是我的面试过程,为了这次面试,也收集了很多的面试题,反正我已经面过了,那就免费分享出来吧!
需要的朋友:**关注一下,然后[点击这里即可](https://gitee.com/vip204888/java-p7)免费领取**
以下是部分面试题截图
![Java程序员秋招三面蚂蚁金服,我总结了所有面试题,也不过如此](https://img-blog.csdnimg.cn/img_convert/3f90ed90c526671889485f5c128cf89e.png)