您当前的位置: 首页 >  Java

wespten

暂无认证

  • 0浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深入学习java源码之Arrays.binarySearch()与Arrays.copyOf()

wespten 发布时间:2019-01-06 23:05:52 ,浏览量:0

深入学习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 Descriptionstatic intbinarySearch(byte[] a, byte key)

使用二进制搜索算法搜索指定值的指定字节数组。

static intbinarySearch(byte[] a, int fromIndex, int toIndex, byte key)

使用二进制搜索算法搜索指定值的指定字节数组的范围。

static intbinarySearch(char[] a, char key)

使用二进制搜索算法搜索指定数组的指定值。

static intbinarySearch(char[] a, int fromIndex, int toIndex, char key)

使用二分搜索算法搜索指定值的指定数组的范围。

static intbinarySearch(double[] a, double key)

使用二进制搜索算法搜索指定值的指定数组的双精度值。

static intbinarySearch(double[] a, int fromIndex, int toIndex, double key)

使用二分搜索算法搜索指定值的指定数组的双精度范围。

static intbinarySearch(float[] a, float key)

使用二叉搜索算法搜索指定数组的浮点数。

static intbinarySearch(float[] a, int fromIndex, int toIndex, float key)

使用二分搜索算法搜索指定数组的浮点数范围。

static intbinarySearch(int[] a, int key)

使用二叉搜索算法搜索指定的int数组的指定值。

static intbinarySearch(int[] a, int fromIndex, int toIndex, int key)

使用二叉搜索算法搜索指定值的指定数组的范围。

static intbinarySearch(long[] a, int fromIndex, int toIndex, long key)

使用二分搜索算法搜索指定值的指定数组的范围。

static intbinarySearch(long[] a, long key)

使用二进制搜索算法搜索指定数组的指定数组。

static intbinarySearch(Object[] a, int fromIndex, int toIndex, Object key)

使用二进制搜索算法搜索指定对象的指定数组的范围。

static intbinarySearch(Object[] a, Object key)

使用二叉搜索算法搜索指定对象的指定数组。

static intbinarySearch(short[] a, int fromIndex, int toIndex, short key)

使用二进制搜索算法搜索指定值的指定数组的短整型范围。

static intbinarySearch(short[] a, short key)

使用二进制搜索算法搜索指定值的指定数组的指定值。

static intbinarySearch(T[] a, int fromIndex, int toIndex, T key, Comparator
关注
打赏
1665965058
查看更多评论
0.0449s