深入学习java源码之Arrays.binarySearch()与Arrays.copyOf()
java中有三种移位运算符
: 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
算术左移和算术右移主要用来进行有符号数的倍增、减半 逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半
比如一个有符号位的8位二进制数10101010,[]是添加的数字
逻辑左移一位:0101010[0] 逻辑左移两位:101010[00]
算术左移一位:0101010[0] 算术左移两位:101010[00]
逻辑右移一位:[0]1010101 逻辑右移两位:[00]101010
算术右移一位:[1]1010101 算术右移两位:[11]101010
// 20
System.out.println(10 1);
// -5
System.out.println(-10 >> 1);
// 5
System.out.println(10 >>> 1);
// 2147483643
System.out.println(-10 >>> 1);
论java中System.arrayCopy()与Arrays.copyOf()的区别
如果我们想拷贝一个数组,我们可能会使用System.arraycopy()或者Arrays.copyof()两种方式。
System.arraycopy()
int[] arr = {1,2,3,4,5};
int[] copied=new int[10];
System.arraycopy(arr,0,copied,1,5);//这里的arr是原数组,0是原数组拷贝的其实地址。而copied是目标数组,1是目标数组开始存放的位置,5则是数组存放的长度。
System.out.println(Array.toString(copied));
运行结果如下:
[0,1,2,3,4,5,0,0,0,0];
arrays.copyof()
int[] arr = {1,2,3,4,5};
int copied=arrays.copyof(arr,10);
System.out.println(Arrays.toString(copied));
copied=arrays.copyof(arr,3);
System.out.println(Arrays.toString(copied));
运行结果如下:
[1,2,3,4,5,0,0,0,0,0]
[1,2,3]
这里我们来谈谈他们的区别,这也是之前我一直没弄懂的地方:
两者的区别在于,Arrays.copyOf()不仅仅只是拷贝数组中的元素,在拷贝元素时,会创建一个新的数组对象。而System.arrayCopy只拷贝已经存在数组元素。
如果我们看过Arrays.copyOf()的源码就会知道,该方法的底层还是调用了System.arrayCopyOf()方法。
而且System.arrayCopy如果改变目标数组的值原数组的值也会随之改变。
Modifier and TypeMethod and Description
static int
binarySearch(byte[] a, byte key)
使用二进制搜索算法搜索指定值的指定字节数组。
static int
binarySearch(byte[] a, int fromIndex, int toIndex, byte key)
使用二进制搜索算法搜索指定值的指定字节数组的范围。
static int
binarySearch(char[] a, char key)
使用二进制搜索算法搜索指定数组的指定值。
static int
binarySearch(char[] a, int fromIndex, int toIndex, char key)
使用二分搜索算法搜索指定值的指定数组的范围。
static int
binarySearch(double[] a, double key)
使用二进制搜索算法搜索指定值的指定数组的双精度值。
static int
binarySearch(double[] a, int fromIndex, int toIndex, double key)
使用二分搜索算法搜索指定值的指定数组的双精度范围。
static int
binarySearch(float[] a, float key)
使用二叉搜索算法搜索指定数组的浮点数。
static int
binarySearch(float[] a, int fromIndex, int toIndex, float key)
使用二分搜索算法搜索指定数组的浮点数范围。
static int
binarySearch(int[] a, int key)
使用二叉搜索算法搜索指定的int数组的指定值。
static int
binarySearch(int[] a, int fromIndex, int toIndex, int key)
使用二叉搜索算法搜索指定值的指定数组的范围。
static int
binarySearch(long[] a, int fromIndex, int toIndex, long key)
使用二分搜索算法搜索指定值的指定数组的范围。
static int
binarySearch(long[] a, long key)
使用二进制搜索算法搜索指定数组的指定数组。
static int
binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
使用二进制搜索算法搜索指定对象的指定数组的范围。
static int
binarySearch(Object[] a, Object key)
使用二叉搜索算法搜索指定对象的指定数组。
static int
binarySearch(short[] a, int fromIndex, int toIndex, short key)
使用二进制搜索算法搜索指定值的指定数组的短整型范围。
static int
binarySearch(short[] a, short key)
使用二进制搜索算法搜索指定值的指定数组的指定值。
static int
binarySearch(T[] a, int fromIndex, int toIndex, T key, Comparator
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?