数组的部分练习

本文介绍了Java中数组的复制方法(手动实现、copyOf、arraycopy和clone),寻找最大元素、计算平均值,以及查找有序性和冒泡排序。此外,还提及了一套全面的Java开发学习资源和面试指南,包括常见面试题和解答。

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));

}

总结:
  1. 这四种拷贝方式从本质上来说都是浅拷贝

  2. copyOf 相对于数组元素来说:只有数组为一维数组,并且元素为基本类型、包装类或String类型时,才是深拷贝;其它都属于浅拷贝

  3. 这四种方法,最快的是方法③,因为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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

一次偶然,从朋友那里得到一份“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高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

image

请注意:关于这份“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个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值