return ret;
}

- 方法② toString
使用 toString 方法后续打印数组就会很方便
Java 中提供了 java.util.Arrays 包,其中包含了一些操作数组的常用方法,可以去帮助文档自行查看
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
String ret = Arrays.toString(array);
}
2.数组的拷贝:
将数组1 的内容 拷贝到数组2 中
- 方法① 手动实现
public static int[] copyArray(int[] array){
//将array拷贝到 array2中
int[] array2 = new int[array.length];
for (int i = 0; i < array.length; i++) {
array2[i] = array[i];
}
return array2;
}
- 方法② copyOf
此处,返回了一个新的对象
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
int[] ret = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(ret));
}

- 方法③ arraycopy
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
int[] ret = new int[array.length];
System.arraycopy(array,0,ret,0,array.length);
System.out.println(Arrays.toString(ret));
}

看到这,你会发现,刚刚的方法②,底层调用的是System.arraycopy方法实现的
因为System.arraycopy是native的方法,故这几种方法种,方法③,即 System.arraycopy最快
- 方法④ clone
clone相当于产生了这个对象的一个副本
clone是Object的克隆方法,Object是所有类的父类
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
int[] ret = array.clone();
System.out.println(Arrays.toString(ret));
}
总结:
-
这四种拷贝方式从本质上来说都是浅拷贝
-
copyOf 相对于数组元素来说:只有数组为一维数组,并且元素为基本类型、包装类或String类型时,才是深拷贝;其它都属于浅拷贝
-
这四种方法,最快的是方法③,因为System.arraycopy是native方法,底层是C/C++代码实现的,而Array.copyOf的底层是调用了System.arraycopy,故方法③最快
3.找数组中的最大元素:
找出一个整型数组中的最大元素
public static int findMax(int[] array){
int max = array[0];
for (int i = 1; i < array.length; i++) {
if(max < array[i]);
max = array[i];
}
return max;
}
public static void main(String[] args) {
int[] array = {12,8,3,9,7,2,14,6};
int ret = findMax(array);
System.out.println(“下标”+ ret);
}
输出结果:下标6
4.求数组中元素的平均值:
public static double aveArray(int[] array){
int len = array.length;
double ret = 0.0;
int sum = 0;
for (int i = 0; i < len; i++) {
sum += array[i];
}
ret = sum/len;
return ret;
}
此处注意结果要用double表示,因为可能会出现小数
5.查找数组中指定元素:
(1) 顺序查找:
public static int find1(int[] array,int toFind){
for (int i = 0; i < array.length; i++) {
if(array[i] == toFind) {
return i;
}
}
return -1; //表示没找到
}
public static void main(String[] args) {
int[] array = {9,5,2,6,7,8,3,1,10};
int ret = find1(array,8);
System.out.println(“下标:”+ret);
}
执行结果 下标:5
(2) 二分查找 (折半查找) :
针对有序数组, 可以使用二分查找,更高效
以升序数组为例,二分查找的思路是先取中间位置的元素,看要找的值比中间元素大还是小,如果小, 就去左边找;否则就去右边找
局限性:必须是一个有序数列
- 手动实现:
public static int binarySearch(int[] array,int toFind){
int left = 0;
int right = array.length-1;
while(left <= right){
int mid = (left + right) / 2;
if(toFind < array[mid]){
right = mid - 1;
}
else if(toFind > array[mid]){
left = mid + 1;
}
else {
return mid;
}
}
return -1; //表示没找到
}
- 使用Arrays工具类
int[] array = {1,3,5,7,9,10,13};
System.out.println(Arrays.binarySearch(arrar,10));
6.判断数组是否有序:
给定一个数组,判断是否是升序 / 降序
以升序为例:
public static boolean isUp(int[] array){
for (int i = 0; i < array.length-1; i++) {
if(array[i] > array[i+1]){
return false;
}
}
return true;
}
🔺7.数组 冒泡排序:
给定一个数组,让数组升序 / 降序排序
此处以升序为例:
- 代码①:
public static void bubbleSort(int[] array){
for (int k = 0; k < array.length-1; k++) {
for (int i = 0; i < array.length-1-k; i++) {
if(array[i] > array[i+1]){
int tmp = array[i];
array[i] = array[i+1];
array[i+1] = tmp;
}
}
}
}
public static void main(String[] args) {
int[] array = {9,12,8,6,10};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
画图解析:

思考:
若数组开始就是按照顺序排列的,比如:{ 1,2,3,4,5,6,7,8,20,6 },这样的情况,再去按照上述代码进行比较就没有意义了
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。


既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。
这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
va序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。
这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。
[外链图片转存中…(img-CvHKZdYJ-1713719098857)]
请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
本文介绍了Java中数组的复制方法(手动实现、copyOf、arraycopy和clone),寻找最大元素、计算平均值,以及查找有序性和冒泡排序。此外,还提及了一套全面的Java开发学习资源和面试指南,包括常见面试题和解答。

被折叠的 条评论
为什么被折叠?



