033-三十三、数组的常用操作
引言
由于在数组的16节写掉了一节,在这里补上数组的拷贝,冒泡排序,二分法查找。
数组的拷贝
数组的拷贝有4中方式
1.for
循环方法: 代码灵活,但效率低。就是用一个for
循环进行元素的逐个拷贝,进行深拷贝或者浅复制这个大家可以自己把握。
如图:
2.System.arraycopy()方法
通过源码可以看到,其为native方法,即原生态方法。自然效率更高。
参数:src
– 源数组。srcPos
– 源数组中的起始位置。dest
– 目标数组。destPos
– 目标数据中的起始位置。length
– 要复制的数组元素的数量
3.Arrays.copyOf
的用法
同样看源码,它的实现还是基于System.arraycopy()
,所以效率自然低System.arraycpoy()
。
代码演示:
4.Object.clone()
方法从源码来看同样也是native
方法,但返回为Object
类型,所以赋值时将发生强转,所以效率不如之前两种。
代码演示:
数组排列
- 直接排序,双重for循环,数组的第一个数
a[0]
和后面所有的数进行比对,得到最小的数,然后第二个数a[1]
和后面所有的数进行比对,得到次小的数。。。反复后得到排序后的结果。
代码演示:
- 冒泡排序是两两之间进行对比,这样最大的一个数就到了数组的最后,第二次进行比对的时候只要比数组长度
-2
次,就是<arr.length-1
,即可得到次大的数,放在倒数第二的位置,如此反复得到排序后的数组。
-
插入排序和打牌一样,拿到一个数和前面已有的数进行对比,比前面的数小就放到前面
二分查找法
当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。
基本思想:
假设数据是按升序排序的,对于给定值 x
,从序列的中间位置开始比较,如果当前位置值等于x
,则查找成功;若 x
小于当前位置值,则在数列的前半段中查找;若 x
大于当前位置值则在数列的后半段中继续查找,直到找到为止。
假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 }
,现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1
。
代码如下:
第二种使用递归的方法来实现二分查找如图:
写完了如果写得有什么问题,希望读者能够给小编留言,也可以点击[此处扫下面二维码关注微信公众号](https://www.ycbbs.vip/?p=28 "此处扫下面二维码关注微信公众号")
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
本文著作权归作者所有,如若转载,请注明出处
转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com