# 一、binarySearch

使用二分搜索法来搜索指定的数组,以获得指定对象。该方法返回要搜索元素的索引值。务必注意:数组必须经过排序才可以使用此方法,否则返回下标显示不准。binarySearch()方法提供多种重载形式,用于满足各种类型数组的查找需要。

【1】binarySearch(Object[] a, Object key):【a】要搜索的数组;【key】要搜索的值;如果key在数组中,则返回搜索值的索引;否则返回-1-(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素的索引。

技巧:
[1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;
[2] 搜索值是数组元素,从0开始计数,得搜索值的索引值;
[3] 搜索值不是数组元素,且小于数组内元素,索引值为–1
[4] 搜索值不是数组元素,且大于数组内元素,索引值为– (length + 1)【我们用的最多的特性】

import java.util.Arrays;
 
public class ArraysBinarySearch {
    public static void main(String[] args) {
        int arr[] = new int[]{3, 5, 7, 9, 11, 13};
 
        Arrays.sort(arr);
 
        for (int i = 0; i < 17; i++) {
            System.out.println("数字【" + i + "】:" + Arrays.binarySearch(arr, i));
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

结果:

数字【0】:-1
数字【1】:-1
数字【2】:-1
数字【3】:0
数字【4】:-2
数字【5】:1
数字【6】:-3
数字【7】:2
数字【8】:-4
数字【9】:3
数字【10】:-5
数字【11】:4
数字【12】:-6
数字【13】:5
数字【14】:-7
数字【15】:-7
数字【16】:-7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

【2】binarySearch(Object[] a, int fromIndex, int toIndex, Object key):【a】要搜索的数组;【fromIndex】指定范围的开始处索引(包含)【toIndex】指定范围的结束处索引(不包含)【key】:要搜索的值。

技巧:
[1] 该搜索键在范围内,但不是数组元素,由1开始计数,得“ - 插入点索引值”;
[2] 该搜索键在范围内,且是数组元素,由0开始计数,得搜索值的索引值;
[3] 该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1)
[4] 该搜索键不在范围内,且大于范围(数组)内元素,返回–(toIndex + 1)

import java.util.Arrays;
 
public class ArraysBinarySearch2 {
    public static void main(String[] args) {
        int arr[] = new int[]{3, 5, 7, 9, 11, 13};
 
        Arrays.sort(arr);
 
        for (int i = 0; i < 17; i++) {
            System.out.println("数字【" + i + "】:" + Arrays.binarySearch(arr, 1, 4, i));
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

结果:

数字【0】:-2
数字【1】:-2
数字【2】:-2
数字【3】:-2
数字【4】:-2
数字【5】:1
数字【6】:-3
数字【7】:2
数字【8】:-4
数字【9】:3
数字【10】:-5
数字【11】:-5
数字【12】:-5
数字【13】:-5
数字【14】:-5
数字【15】:-5
数字【16】:-5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 二、sort

Arrays.sort ( 数组名 )  &&  Arrays.sort(数组,排序规则)
1

按照默认升序(从小到大)对数组的元素进行排序。
1、如果是数值,sort默认按照升序从小到大,底层使用的是快速排序
2、如果是字符串,sort默认按照字母升序
3、如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持

# 三、equals

判断两个数组是否相等

Arrays.equals ( 数组名1,数组名2 )

// 拷贝数组(指定范围)
Array.copy Of Range(原数据,起始索引,结束索引)
1
2
3
4

# 四、copyOf

Arrays.copyOf(原数组 , 新数组长度)
1

拷贝数组:方法的底层会根据第二个参数来创建新的数组:
【1】如果新数组的长度是小于老数组的长度,会部分拷贝;
【2】如果新数组的长度是等于老数组的长度,会完全拷贝;
【3】如果新数组的长度是大于老数组的长度,会补上默认初始值;

# 五、fill

Arrays.fill ( 数组名, 要填充的 值 或 元素 )
1

将指定值填充到数组之中:包头不包尾,包左不包右(左闭右开)

#

(adsbygoogle = window.adsbygoogle || []).push({});